hustyangyang 发表于 2006-7-19 15:05

[分享][原创]单纯形法的程序代码,程序中不是用纯粹的VC++,输出函数用的是printf(

<p>#include&lt;stdio.h&gt;<br/>#include&lt;iostream.h&gt;<br/>#include&lt;math.h&gt;<br/>float matrix,x;<br/>int a;<br/>int m,n,s,type;<br/>int indexe,indexl,indexg;<br/>/////////////////////////////////<br/>void jckxj()//基础可行解<br/>{<br/>&nbsp;int i,j;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //基础可行解即为 非基变量对应的x=b, 基变量对应的解为0<br/>&nbsp;for(i=0;i&lt;n;i++)<br/>&nbsp;&nbsp;for(j=0;j&lt;s;j++)<br/>&nbsp;&nbsp;&nbsp;if(matrix==1&amp;&amp;a==1)<br/>&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;x=matrix;<br/>&nbsp;&nbsp;&nbsp;&nbsp;j=s;<br/>&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;for(i=0;i&lt;s;i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(a==0)x=0;<br/>}</p><p>int rj()//基解矩阵<br/>{<br/>&nbsp;int i;<br/>&nbsp;for(i=0;i&lt;s;i++)<br/>&nbsp;&nbsp;if(fabs(matrix)&gt;=0.000001)<br/>&nbsp;&nbsp;&nbsp;if(matrix&lt;0)return 0;<br/>&nbsp;&nbsp;&nbsp;return 1;<br/>}</p><p>int Min()//求最小的<br/>{<br/>&nbsp;&nbsp;&nbsp; int i,temp=0;<br/>&nbsp;float min=matrix;<br/>&nbsp;for(i=1;i&lt;s;i++)<br/>&nbsp;&nbsp;if(min&gt;matrix)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;min=matrix;<br/>&nbsp;&nbsp;&nbsp;temp=i;<br/>&nbsp;&nbsp;}<br/>&nbsp;return temp;<br/>}<br/>/////////////////////////////////<br/>void JustArtificial()//人工变量<br/>{<br/>&nbsp;int i;<br/>&nbsp;for(i=m+indexe+indexl;i&lt;s;i++)<br/>&nbsp;&nbsp;if(fabs(x)&gt;=0.000001)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;cout&lt;&lt;"NO Answer\n";<br/>&nbsp;&nbsp;&nbsp;return;<br/>&nbsp;&nbsp;}<br/>}<br/>/////////////////////<br/>int Check(int in)//检验<br/>{<br/>&nbsp;int i;<br/>&nbsp;float maxl=-1;<br/>&nbsp;for(i=0;i&lt;n;i++)<br/>&nbsp;&nbsp;if(fabs(matrix)&gt;=0.000001&amp;&amp;maxl&lt;matrix/matrix)<br/>&nbsp;&nbsp;&nbsp;maxl=matrix/matrix;<br/>&nbsp;&nbsp;if(maxl&lt;0)<br/>&nbsp;&nbsp;&nbsp;return 1;<br/>&nbsp;&nbsp;return 0;<br/>}</p><p>int SearchOut(int *temp,int in)//出基变量<br/>{<br/>&nbsp;int i;<br/>&nbsp;float min=10000;<br/>&nbsp;for(i=0;i&lt;n;i++)<br/>&nbsp;&nbsp;if(fabs(matrix)&gt;=0.000001&amp;&amp;(matrix/matrix&gt;=0)<br/>&nbsp;&nbsp;&nbsp;&amp;&amp;min&gt;matrix/matrix)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;min=matrix/matrix;<br/>&nbsp;&nbsp;&nbsp;*temp=i;<br/>&nbsp;&nbsp;}&nbsp;&nbsp;<br/>&nbsp;for(i=0;i&lt;s;i++)<br/>&nbsp;&nbsp;if(a=1&amp;&amp;matrix[*temp]==1)<br/>&nbsp;return i;<br/>}<br/>/////////////////////////////////<br/>void Mto(int in,int temp)<br/>{<br/>&nbsp;int i;<br/>&nbsp;for(i=0;i&lt;=s;i++)<br/>&nbsp;&nbsp;if(i!=in)<br/>&nbsp;&nbsp;&nbsp;matrix=matrix/matrix;<br/>&nbsp;&nbsp;matrix=1;<br/>}<br/>/////////////////////////////<br/>void Be(int temp,int in)//初等变换<br/>{<br/>&nbsp;int i,j;<br/>&nbsp;float c;<br/>&nbsp;for(i=0;i&lt;=n;i++)<br/>&nbsp;{<br/>&nbsp;&nbsp;c=matrix/matrix;<br/>&nbsp;&nbsp;if(i!=temp)<br/>&nbsp;&nbsp;&nbsp;for(j=0;j&lt;=s;j++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;matrix=matrix-matrix*c;<br/>&nbsp;}<br/>}<br/>//////////////////////////<br/>void Achange(int in,int out)//出基入基转换<br/>{<br/>&nbsp;int temp=a;<br/>&nbsp;a=a;<br/>&nbsp;a=temp;<br/>}<br/>////////////////////////<br/>void Print()<br/>{<br/>&nbsp;int i,j,k,temp=0;<br/>&nbsp;for(i=0;i&lt;n;i++)<br/>&nbsp;{<br/>&nbsp;&nbsp;for(k=temp;k&lt;s;k++)<br/>&nbsp;&nbsp;&nbsp;if(a==1)<br/>&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(" %d ",k);<br/>&nbsp;&nbsp;&nbsp;&nbsp;temp=k+1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;k=s;<br/>&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;for(j=0;j&lt;=s;j++)<br/>&nbsp;&nbsp;&nbsp;printf( " %.0f ",matrix&nbsp; );<br/>&nbsp;&nbsp;printf("\n");<br/>&nbsp;}<br/>&nbsp;printf("Rj\n");<br/>&nbsp;for(j=0;j&lt;=s;j++)<br/>&nbsp;&nbsp;printf(" %.0f ",matrix );<br/>&nbsp;printf("\n");<br/>}<br/>////////////////////////<br/>void InitPrint()<br/>{<br/>&nbsp;int i;<br/>&nbsp;printf(" X ");<br/>&nbsp;for(i=0;i&lt;s;i++)<br/>&nbsp;&nbsp;printf(" %d ",i);<br/>&nbsp;&nbsp;&nbsp; printf(" b \n" );<br/>&nbsp;printf("&nbsp; " );<br/>&nbsp;printf("\n" );<br/>}<br/>//////////////////<br/>void Result()<br/>{<br/>&nbsp;int i;<br/>&nbsp;printf( "(" );<br/>&nbsp;for(i=0;i&lt;s;i++)<br/>&nbsp;&nbsp;printf( "%.0f",x );<br/>&nbsp;printf( ")" );<br/>&nbsp;if(type==1)<br/>&nbsp;&nbsp;printf("\nZmax= %.0f\n" ,matrix );<br/>&nbsp;else printf("\nZmin=%.0f\n", matrix );<br/>}<br/>//////////////////////<br/>void PrintResult()<br/>{<br/>&nbsp;if(type==0)<br/>&nbsp;&nbsp;printf("the Minimal: %.2f\n", matrix );<br/>&nbsp;else <br/>&nbsp;&nbsp;printf("the Maximum: %.2f\n", matrix );<br/>}<br/>////////////////////////////////<br/>void Merge(float nget[],float nlet[],float net[],float b[])//合并 <br/>{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //置成我们需要的矩阵,最后一列置成0 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 1&nbsp; 2&nbsp; 1&nbsp; 0&nbsp; 0&nbsp; 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 4&nbsp; 0&nbsp; 0&nbsp; 1&nbsp; 0&nbsp; 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 0&nbsp; 4&nbsp; 0&nbsp; 0&nbsp; 1&nbsp; 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //-2 -3&nbsp; 0&nbsp; 0&nbsp; 0&nbsp; 0<br/>&nbsp;int i,j;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;for(i=0;i&lt;n;i++)<br/>&nbsp;{<br/>&nbsp;&nbsp;for(j=m;j&lt;m+indexe;j++)<br/>&nbsp;&nbsp;&nbsp;if(nget!=-1)matrix=0;<br/>&nbsp;&nbsp;&nbsp;else matrix=-1;<br/>&nbsp;&nbsp;for(j=m+indexe;j&lt;m+indexe+indexl;j++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(nlet!=1)matrix=0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else matrix=1;<br/>&nbsp;&nbsp;for(j=m+indexe+indexl;j&lt;s;j++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(net!=1)matrix=0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else matrix=1;<br/>&nbsp;}<br/>&nbsp;for(i=m;i&lt;m+indexe+indexl;i++)&nbsp; //将目标函数中人工变量的系数补为0<br/>&nbsp;&nbsp;matrix=0;<br/>&nbsp;for(i=m+indexe+indexl;i&lt;s;i++)<br/>&nbsp;&nbsp;matrix=100;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //置成M<br/>&nbsp;for(i=0;i&lt;n;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把b[]的值赋给matrix <br/>&nbsp;&nbsp;&nbsp;&nbsp; matrix=b;<br/>&nbsp;matrix=0;<br/>}</p><p><br/>///////////////////////////<br/>void ProcessA()//初始a[]&nbsp;&nbsp;&nbsp; a[]是标记基变量,若为基变量则为0,若为非基变量则为1<br/>{<br/>&nbsp;int i;<br/>&nbsp;for(i=0;i&lt;m+indexe;i++)<br/>&nbsp;&nbsp;a=0;<br/>&nbsp;for(i=m+indexe;i&lt;s;i++)<br/>&nbsp;&nbsp;a=1;<br/>}</p><p>////////////////////////////////<br/>void Input(float b[],int code[])<br/>{<br/>&nbsp;int i=0;int j=0;<br/>&nbsp;cout&lt;&lt;"The equator variable and Restrictor\n";<br/>&nbsp;cin&gt;&gt;m&gt;&gt;n;<br/>&nbsp;for(i=0;i&lt;n;i++)<br/>&nbsp;{<br/>&nbsp;&nbsp;cout&lt;&lt;"Inputb[] and Restrictor code 0:&lt;= 1:= 2:&gt;=\n";//输入b[]和限制符号 &lt;= ,= ,&gt;=<br/>&nbsp;&nbsp;cin&gt;&gt;b&gt;&gt;code;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //分别输入到b 和&nbsp; code 中<br/>&nbsp;&nbsp;cout&lt;&lt;"The 系数&nbsp; \n";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //提示输入每个限制条件的系数<br/>&nbsp;&nbsp;for(j=0;j&lt;m;j++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;cin&gt;&gt;matrix;<br/>&nbsp;}<br/>&nbsp;cout&lt;&lt;"the type 0:Min 1:max\n";//输入要求是类型极大还是极小 0:Min 1:max<br/>&nbsp;do{<br/>&nbsp;&nbsp;cin&gt;&gt;type;<br/>&nbsp;&nbsp;if(type!=0&amp;&amp;type!=1)<br/>&nbsp;&nbsp;&nbsp;cout&lt;&lt;"error,ReInput!\n";<br/>&nbsp;}while(type!=0&amp;&amp;type!=1);<br/>&nbsp;cout&lt;&lt;"the Z\n";<br/>&nbsp;for(i=0;i&lt;m;i++)<br/>&nbsp;&nbsp;cin&gt;&gt;matrix;<br/>&nbsp;if(type==1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果是求极大,把它转化为极小来做,系数全部反号<br/>&nbsp;&nbsp;for(i=0;i&lt;m;i++)<br/>&nbsp;&nbsp;&nbsp;matrix=-matrix;<br/>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><p><br/>//////////////////&nbsp;&nbsp;&nbsp; <br/>void Xartificial()//消去人工变量<br/>{<br/>&nbsp;int i,j,k;<br/>&nbsp;<br/>&nbsp;if(indexg!=0)<br/>&nbsp;{<br/>&nbsp;&nbsp;for(i=m+indexe+indexl;i&lt;s;i++)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;for(j=0;j&lt;n;j++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(matrix==1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(k=0;k&lt;=s;k++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix=matrix-matrix*100;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j=n;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;}<br/>&nbsp;}<br/>}</p><p>////////////////////////////////////////////////<br/>void Process(float c[],int row,int vol)<br/>{<br/>&nbsp;int i;<br/>&nbsp;for(i=0;i&lt;n;i++)&nbsp;&nbsp;&nbsp;&nbsp; //i =0 时置第一列为 1&nbsp; 0&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; i=1 时置第2列为 0&nbsp; 1&nbsp; 0&nbsp; <br/>&nbsp;&nbsp;if(i!=row)c=0;<br/>}<br/>//////////////////////<br/>void Start(float b[],int code[])<br/>{<br/>&nbsp;int i;<br/>&nbsp;float nget,nlet,net;<br/>&nbsp;indexe=indexl=indexg=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //indexl 表示松弛变量数&nbsp;&nbsp; indexg 表示人工变量数, indexe表示减去的松弛变量数<br/>&nbsp;for(i=0;i&lt;n;i++)<br/>&nbsp;{<br/>&nbsp;&nbsp;if(code==0)&nbsp;&nbsp;&nbsp; //如果是&lt;=<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;nlet=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //松弛变量数+1 且置成相应的标记<br/>&nbsp;&nbsp;&nbsp;Process(nlet,i,indexl-1);//传 net, 行号,indexl-1 过去<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;if(code==1)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;net=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //人工变量数+1且置成相应的标记<br/>&nbsp;&nbsp;&nbsp;Process(net,i,indexg-1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将刚加入的列单位化 <br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;if(code==2)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;net=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //人工变量数+1 且置成相应的标记<br/>&nbsp;&nbsp;&nbsp;nget=-1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //剩余变量数+1 且置成相应的标记<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Process(net,i,indexg-1);Process(nlet,i,indexe-1);<br/>&nbsp;&nbsp;}<br/>&nbsp;}<br/>&nbsp;s=indexe+indexl+indexg+m;&nbsp;&nbsp; //变量总个数<br/>&nbsp;Merge(nget,nlet,net,b);<br/>&nbsp;ProcessA();<br/>&nbsp;InitPrint();<br/>&nbsp;Xartificial();<br/>}</p><p>void Simplix()//单纯形法<br/>{<br/>&nbsp;int in,out,temp=0;<br/>&nbsp;while(1)<br/>&nbsp;{<br/>&nbsp;&nbsp;jckxj();<br/>&nbsp;&nbsp;Print();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Result();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!rj()) in=Min();<br/>&nbsp;&nbsp;else<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;if(indexg!=0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;JustArtificial();<br/>&nbsp;&nbsp;&nbsp;PrintResult();<br/>&nbsp;&nbsp;&nbsp;return;<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;if(Check(in))<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;cout&lt;&lt;"No Delimition\n";<br/>&nbsp;&nbsp;&nbsp;return;<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;out=SearchOut(&amp;temp,in);<br/>&nbsp;&nbsp;Mto(in,temp);<br/>&nbsp;&nbsp;Be(temp,in);<br/>&nbsp;&nbsp;Achange(in,out);<br/>&nbsp;}<br/>}</p><p>void main()<br/>{<br/>&nbsp;int code;//输入符号标记<br/>&nbsp;float b;<br/>&nbsp;Input(b,code);//初始化<br/>&nbsp;Start(b,code);//标准化行<br/>&nbsp;Simplix();<br/>}<br/>/*模拟输入数据 <br/>&nbsp;max z=2 x1 + 3 x2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s.t {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x1 + 2 x2 &lt;=8<br/>&nbsp;&nbsp;&nbsp;&nbsp; 4 x1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;=16<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4 x2&lt;=12<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x1,x2&gt;=0<br/>&nbsp;&nbsp;&nbsp;}</p><p>2 3 8 0 1 2 16 0 4 0 12 0 0&nbsp; 4<br/>*/</p>

hjhmxh 发表于 2007-6-5 23:35

如果是 = 该如何考虑呢?<br/>

madio 发表于 2008-11-8 18:15

支持!

yangwenli 发表于 2009-1-7 23:58

好厉害,lz的程序不错。
不过用gsl科学计算库的话可以省下很多步骤:)

梦紫涵 发表于 2009-2-16 22:39

1# hustyangyang 好啊
页: [1]
查看完整版本: [分享][原创]单纯形法的程序代码,程序中不是用纯粹的VC++,输出函数用的是printf(