表上作业法的源代码.docx
- 文档编号:25415227
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:19
- 大小:91.29KB
表上作业法的源代码.docx
《表上作业法的源代码.docx》由会员分享,可在线阅读,更多相关《表上作业法的源代码.docx(19页珍藏版)》请在冰豆网上搜索。
表上作业法的源代码
表上作业法的源代码(总10页)
/*表上作业法的源代码*/
#include""
#include""
#include""
/*#definedebug*/
#definea(j)(*(C+(M-1)*N+j))/*销量数组*/
#defineb(i)(*(C+i*N+N-1))/*产量数组*/
#definec(i,j)(*(C+i*N+j))/*运价数组*/
#definex(i,j)(*(X+i*(N-1)+j))/*运量数组*/
/*(<:
基本解,>=:
运量为0)*/
#defines(i,j)(*(S+i*(N-1)+j))/*检验数数组Sij*/
#defineu(i)(*(U+i))/*位势数组Ui*/
#definev(i)(*(V+i))/*位势数组Vi*/
#definecpi(k)((CP+k)->i)/*闭回路点i标*/
#definecpj(k)((CP+k)->j)/*闭回路点i标*/
#definecpf(k)((CP+k)->f)/*闭回路点i标*/
/*f=0:
j++;f=2:
j--;
f=1;i--;f=3:
i++;*/
/*voidTP(intM,intN,double*C,double*X);*/
10630
02030405060
1271416910913814
183185119162137102179118114
189107169161179169140135112
184149128106165178199183194
127184173124125151127178160
162105150185179153174121142
108163157138189171114131165
150159131155135165124167107
109107149175162108182135181
106136183134179188136131189
166158159180162104116159111
voidmain()
{
intM,N,i,j;
double*C;/*存储运价,产量及销量*/
double*X;/*存储运量分配方案*/
floatz;
FILE*fp;
charfn[80];
doublesum;
voidTP(intM,intN,double*C,double*X);
printf("pleaseinputthedatafilename:
");
scanf("%s",fn);
if((fp=fopen(fn,"r"))==NULL)
{
printf("Cannotopenthedatafile!
");
getch();
exit(0);
}
fscanf(fp,"%d%d",&M,&N);
M++;N++;
X=(double*)malloc(sizeof(double)*(M-1)*(N-1));
C=(double*)malloc(sizeof(double)*M*N);
/*把运价,供应量和需求量的数据读入到数组c(i,j);*/
/*---高太光:
这里可以直接定义固定的数组c(i,j),也可以从文件读取
for(i=0;i { for(j=0;j { fscanf(fp,"%f",&z); c(i,j)=z; } printf("\n"); } fclose(fp); /*outputc(i,j);*/ printf("\n=============DataFile================\n"); for(i=0;i for(j=0;j { printf("%",c(i,j)); } printf("\n"); } getch(); TP(M,N,C,X); /*输出产销分配方案;*/ printf("\n=============BestSolution===================\n"); sum=0; for(i=0;i { for(j=0;j { if(x(i,j)>= printf("%10s","******"); else {printf("%",x(i,j)); sum+=(x(i,j)*c(i,j)); } } printf("\n"); } printf("\n\n\tTheminCostis: %\n",sum); getch(); free(X); free(C); } structPATH{ inti,j,f; };/*记录闭回路点结构*/ voidTP(intM,intN,double*C,double*X) { double*U,*V,*S; intMN1,m,n; structPATH*CP; intk,i,j,l,k1,l1,ip; doubleCmin,sum; intI0,J0,Imin,Jmin; intfi,fj,fc,f; MN1=(M-1)+(N-1)-1; m=M-1;n=N-1; S=(double*)malloc(sizeof(double)*(M-1)*(N-1)); U=(double*)malloc(sizeof(double)*M); V=(double*)malloc(sizeof(double)*N); CP=(structPATH*)malloc(sizeof(structPATH)*(MN1+1)); #ifdefdebug printf("\nM=%d,N=%d,m=%d,n=%d\n",M,N,m,n); printf("\nb(i)isfollowing: \n"); for(i=0;i printf("%\t",b(i)); printf("\na(j)isfolowing: \n"); for(j=0;j printf("%\t",a(j)); printf("\n"); getch(); #endif /*解初始化Xij=;*/ for(i=0;i for(j=0;j x(i,j)=; /*最小元素法求初始可行解*/ for(k=0;k { Cmin=; for(i=0;i { fi=0; for(l=0;l { /*去除已经用过的行;*/ if(i==cpi(l)){fi=1;break;} } if(fi==1)continue; for(j=0;j { fj=0; for(l=0;l { /*去除已经用过的列;*/ if(j==cpj(l)){fj=1;break;} } if(fj==1)continue; if(Cmin>c(i,j)) { Cmin=c(i,j);I0=i;J0=j; #ifdefdebug printf("\nnowc(i,j)=%\n",c(i,j)); #endif } }/*endforj*/ }/*endfori*/ /*得到了未划去的最小运价所在格的坐标(I0,J0)和最小运价Cmin*/ if(k>0) {if(Cmin==&&cpi(k-1)==0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 作业 源代码