⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpp1.cpp

📁 用基本C++语言实现的解决运筹学对偶问题的程序
💻 CPP
字号:
#include<iostream>
using namespace std;

int m,n;
int* s;       //约束符号
int* ss;
char style;//目标函数类型
char styles;      
int* b;      //右端系数
int* bb;
int* f;      //取值约束
int* ff;
int* c;      //目标函数系数
int* cc;
int** A;     //约束条件系数     
int** AA;    //结果

void Input()
{
	int i,j;
	A=new int* [m];
	AA=new int* [n];
	b=new int[m];
	bb=new int[n];
	f=new int[n];
	ff=new int[m];
	c=new int[n];
	cc=new int[m];
	s=new int[m];
	ss=new int[n];
	for(i=0;i<m;i++)
		A[i]=new int[n];
	for(i=0;i<n;i++)
		AA[i]=new int[m];
	for(i=0;i<m;i++)
	{
		cout<<"请输入第"<<(i+1)<<"个约束条件\n";
		for(j=0;j<(n+2);j++)
		{
			if(j==n)
			{
				cout<<"请输入不等式符号(-1代表〈=,1代表〉=,0代表=):";
				cin>>s[i];
			}
			else if(j==n+1)
			{
				cout<<"请输入右端系数:";
				cin>>b[i];
			}
			else
			{
				cout<<"第"<<(j+1)<<"个变量系数:";
			    cin>>A[i][j];
			}
		}
	}
	for(j=0;j<n;j++)
	{
		cout<<"请输入第"<<(j+1)<<"个变量的取值约束(1代表>=0,0代表自由,-1代表<=0):";
		cin>>f[j];
        cout<<"请输入目标函数第"<<(j+1)<<"个变量系数:";
		cin>>c[j];
	}
}


void Output()
{
	int i,j;
	if(style=='a')
	{
		styles='i';
		for(i=0;i<m;i++)
			for(j=0;j<n;j++)
				AA[j][i]=A[i][j];
		for(i=0;i<m;i++)
		{
			switch(s[i])
			{
			case -1:
				ff[i]=1;
				break;
			case 0:
				ff[i]=0;
				break;
			case 1:
				ff[i]=-1;
				break;
			}
			cc[i]=b[i];
		}
		for(j=0;j<n;j++)
		{
			switch(f[j])
			{
			case -1:
				ss[j]=-1;
				break;
			case 0:
				ss[j]=0;
				break;
			case 1:
				ss[j]=1;
				break;
			}
			bb[j]=c[j];
		}
	}
	else if(style== 'i')
	{
		styles='a';
		for(i=0;i<m;i++)
			for(j=0;j<n;j++)
				AA[j][i]=A[i][j];
		for(i=0;i<m;i++)
		{
			switch(s[i])
			{
			case -1:
				ff[i]=-1;
				break;
			case 0:
				ff[i]=0;
				break;
			case 1:
				ff[i]=1;
				break;
			}
			cc[i]=b[i];
		}
		for(j=0;j<n;j++)
		{
			switch(f[j])
			{
			case -1:
				ss[j]=1;
				break;
			case 0:
				ss[j]=0;
				break;
			case 1:
				ss[j]=-1;
				break;
			}
			bb[j]=c[j];
		}
	}
	cout<<"对偶问题:\n";
	if(styles=='i') cout<<"min\n";
	else if(styles=='a') cout<<"max\n";
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
			cout<<"+("<<AA[i][j]<<")y"<<(j+1);
		switch(ss[i])
		{
		case -1:
			cout<<"<=";
			break;
		case 0:
			cout<<"=";
			break;
		case 1:
			cout<<">=";
			break;
		}
		cout<<bb[i];
		cout<<"\n";
	}
	cout<<"目标函数:w=";
	for(i=0;i<m;i++)
		cout<<"+"<<cc[i]<<"y"<<(i+1);
	cout<<"\n";
	for(i=0;i<m;i++)
	{
		cout<<"y"<<(i+1);
		switch(ff[i])
		{
		case -1:
			cout<<"<=0\n";
			break;
		case 0:
			cout<<"自由\n";
			break;
		case 1:
			cout<<">=0\n";
			break;
		}
	}
}



void main()
{
	cout<<"目标函数类型(a代表max或i代表min):";
	cin>>style;
	cout<<"约束条件个数:";
	cin>>m;
	cout<<"变量个数:";
	cin>>n;
	Input();
	Output();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -