int main()
{
int k; //初始变量的个数
int m; //约束条件的个数;
cout<<"输入初始变量的个数 "<<endl;
cin>>k;
cout <<"输入约束条件的个数"<<endl;
cin>>m;
cout<<"输入约束条件的种类"<<endl;
cout<<"0 means <="<<endl;
cout<<"1 means >="<<endl;
cout<<"2 means ="<<endl;
int NGET=0;
int NLET=0;
int NET =0;
int I =0;//人工变量;
int *code=new int[m]; //the array of the >= <= =;
for(int i=0;i<m;i++)
{
cin>>code[i];
if(code[i]==0)
NGET++;
if(code[i]==1)
NLET++;
I++ ;
if(code[i]==2)
NET++;
I++ ;
}
int n; //变量总和;
n=k+2*NLET+NGET+NET;
float *Index=new float[n+1]; //目标函数的系数;
float *c=new float[n+1];
int NTYPE;
for(i=0;i<n+1;i++)
Index[i]=0.0;//为语法要求定初值;
cout<<"输入目标函数的系数"<<endl;
for(i=0;i<k;i++)
cin>>Index[i];
for(i=k+NGET+NLET;i<n;i++)//人工变量所在的列;
Index[i]=-M; //the initionalization of indexes of manul variable;
cout<<"输入所求函数的类型是求最大还是最小"<<endl;
cout<<"0 means min"<<endl;
cout<<"1 means max"<<endl;
cin>>NTYPE;
if(NTYPE) //the initionalization of the c[i];
{
for(i=0;i<n+1;i++)
c[i]=-Index[i];//一般情况下只要将目标函数系数的相反数输入;
}
if(!NTYPE)
{
for(i=0;i<n+1;i++)
if(i<k+NGET+NLET)
c[i]=Index[i];
else c[i]=-Index[i];
}
delete []Index;
float **a=new float*[m+1]; //the array of all the variable to compute;
for(i=0;i<m+1;i++)
a[i]=new float[n+1];
int INDEXG=k;
int INDEXL=k+NGET;
int INDEXE=k+NGET+NLET;
int *ARTV=new int[I]; //保存人工变量;
for(i=0;i<m;i++) //the analization of the code[](<= >= =);
{
if(code[i]==0)
{
a[i][INDEXL]=1.0;
INDEXL++;
}
if(code[i]==1)
{
a[i][INDEXE]=1.0;
INDEXE++;
a[i][INDEXG]=-1.0;
INDEXG++;
ARTV[I]=i;
I++;
}
if(code[i]==2)
{
a[i][INDEXE]=1.0;
INDEXE++;
ARTV[I]=i;
I++;
}
}