![表上作業(yè)法的源代碼_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/20/b75a7261-5e2b-47e1-9f08-a654f466efe2/b75a7261-5e2b-47e1-9f08-a654f466efe21.gif)
![表上作業(yè)法的源代碼_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/20/b75a7261-5e2b-47e1-9f08-a654f466efe2/b75a7261-5e2b-47e1-9f08-a654f466efe22.gif)
![表上作業(yè)法的源代碼_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/20/b75a7261-5e2b-47e1-9f08-a654f466efe2/b75a7261-5e2b-47e1-9f08-a654f466efe23.gif)
![表上作業(yè)法的源代碼_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/20/b75a7261-5e2b-47e1-9f08-a654f466efe2/b75a7261-5e2b-47e1-9f08-a654f466efe24.gif)
![表上作業(yè)法的源代碼_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/20/b75a7261-5e2b-47e1-9f08-a654f466efe2/b75a7261-5e2b-47e1-9f08-a654f466efe25.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、/* 表上作業(yè)法的源代碼 */#include "stdio.h"#include "alloc.h"#include "math.h"/* #define debug */#define a(j) (*(C+(M-1)*N+j) /*銷量數(shù)組*/#define b(i) (*(C+i*N+N-1) /*產(chǎn)量數(shù)組*/#define c(i,j) (*(C+i*N+j) /*運(yùn)價(jià)數(shù)組*/#define x(i,j) (*(X+i*(N-1)+j) /*運(yùn)量數(shù)組 */*(<1.0E15:基本解,>=1.0E15:運(yùn)量為0) *
2、/#define s(i,j) (*(S+i*(N-1)+j) /*檢驗(yàn)數(shù)數(shù)組Sij */#define u(i) (*(U+i) /*位勢數(shù)組Ui*/#define v(i) (*(V+i) /*位勢數(shù)組Vi*/#define cpi(k) (CP+k)->i) /*閉回路點(diǎn)i標(biāo)*/#define cpj(k) (CP+k)->j) /*閉回路點(diǎn)i標(biāo)*/#define cpf(k) (CP+k)->f) /*閉回路點(diǎn)i標(biāo)*/* f=0:j+; f=2:j-; f=1;i-; f=3:i+; */*void TP(int M,int N,double *C,double *X
3、); */ 10 6 30 0 20 30 40 50 60 12 7 14 16 9 10 9 13 8 14 183 185 119 162 137 102 179 118 114 189 107 169 161 179 169 140 135 112 184 149 128 106 165 178 199 183 194 127 184 173 124 125 151 127 178 160 162 105 150 185 179 153 174 121 142 108 163 157 138 189 171 114 131 165 150 159 131 155 135 165 124
4、 167 107 109 107 149 175 162 108 182 135 181 106 136 183 134 179 188 136 131 189 166 158 159 180 162 104 116 159 111void main()int M,N,i,j;double *C; /*存儲運(yùn)價(jià),產(chǎn)量及銷量 */double *X; /*存儲運(yùn)量分配方案 */float z;FILE *fp;char fn80;double sum;void TP(int M,int N,double *C,double *X);printf("please input the da
5、ta file name: ");scanf("%s",fn);if(fp=fopen(fn,"r")=NULL) printf("Cannot open the data file!"); 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);/* 把運(yùn)價(jià),供應(yīng)量和需求量的數(shù)據(jù)
6、讀入到數(shù)組c(i,j); */ /*-高太光:這里可以直接定義固定的數(shù)組c(i,j),也可以從文件讀取for(i=0;i<M;i+) for(j=0;j<N;j+) fscanf(fp,"%f",&z); c(i,j)=z; printf("n"); fclose(fp);/* output c(i,j); */printf("n=Data File=n");for(i=0;i<M;i+) for(j=0;j<N;j+) printf("%10.3f",c(i,j); printf(
7、"n"); getch();TP(M,N,C,X);/* 輸出產(chǎn)銷分配方案; */printf("n=Best Solution=n");sum=0;for(i=0;i<M-1;i+) for(j=0;j<N-1;j+) if(x(i,j)>=1.0e15) printf("%10s","*"); else printf("%10.3f",x(i,j); sum+=(x(i,j)*c(i,j); printf("n"); printf("nntTh
8、e min Cost is: %-10.4fn",sum); getch(); free(X); free(C);struct PATH int i,j,f; ; /*記錄閉回路點(diǎn)結(jié)構(gòu)*/void TP(int M,int N, double *C,double *X)double *U,*V,*S;int MN1,m,n;struct PATH *CP;int k,i,j,l,k1,l1,ip;double Cmin,sum;int I0,J0,Imin,Jmin;int fi,fj,fc,f;MN1=(M-1)+(N-1)-1;m=M-1;n=N-1;S=(double *)ma
9、lloc(sizeof(double)*(M-1)*(N-1);U=(double *)malloc(sizeof(double)*M);V=(double *)malloc(sizeof(double)*N);CP=(struct PATH *)malloc(sizeof(struct PATH)*(MN1+1);#ifdef debugprintf("nM=%d,N=%d,m=%d,n=%dn",M,N,m,n);printf("nb(i)is following:n");for(i=0;i<m;i+) printf("%8.4ft&
10、quot;,b(i);printf("na(j)is folowing:n");for(j=0;j<n;j+) printf("%8.4ft",a(j);printf("n");getch();#endif/*解初始化Xij=1.0e15; */for(i=0;i<m;i+) for(j=0;j<n;j+) x(i,j)=1.0e15;/*最小元素法求初始可行解 */for(k=0;k<MN1;k+) Cmin=1.0e15; for(i=0;i<m;i+) fi=0; for(l=0;l<k;l+
11、) /* 去除已經(jīng)用過的行; */ if(i=cpi(l)fi=1;break; if(fi=1)continue; for(j=0;j<n;j+) fj=0; for(l=0;l<k;l+) /* 去除已經(jīng)用過的列; */ if(j=cpj(l)fj=1;break; if(fj=1) continue; if(Cmin>c(i,j) Cmin=c(i,j);I0=i;J0=j; #ifdef debug printf("n now c(i,j)=%8.4fn",c(i,j); #endif /*end for j */ /* end for i */
12、/*得到了未劃去的最小運(yùn)價(jià)所在格的坐標(biāo)(I0,J0)和最小運(yùn)價(jià)Cmin */ if(k>0) if(Cmin=1.0e15&&cpi(k-1)=0) for(l1=0;l1<m;l1+) if(x(l1,cpj(k-1)=1.0e15) x(l1,cpj(k-1)=0; else if(Cmin=1.0e15&&cpi(k-1)!=0) for(l1=0;l1<n;l1+) if(x(cpi(k-1),l1)=1.0e15) x(cpi(k-1),l1)=0; if(b(I0)<a(J0) cpi(k)=I0;cpj(k)=-1; x(I
13、0,J0)=b(I0); #ifdef debug printf("I0=%d,J0=%d,x(I0,J0)=%8.4f,k=%d,cpi(k)=%d,cpj(k)=%dn",I0,J0,x(I0,J0),k,cpi(k),cpj(k); #endif a(J0)-=b(I0); b(I0)=0; else cpi(k)=-1;cpj(k)=J0; x(I0,J0)=a(J0); #ifdef debug printf("I0=%d,J0=%d,x(I0,J0)=%8.4f,k=%d,cpi(k)=%d,cpj(k)=%dn",I0,J0,x(I0,J0
14、),k,cpi(k),cpj(k); #endif b(I0)-=a(J0); a(J0)=0; /*END FOR K 用最小元素法求得了初使可行解*/ /*輸出初始可行解*/printf("n=init Solution=n");sum=0;for(i=0;i<M-1;i+) for(j=0;j<N-1;j+) if(x(i,j)>=1.0e15) printf("%10s","*"); else printf("%10.3f",x(i,j); sum+=(x(i,j)*c(i,j); pri
15、ntf("n"); printf("nntThe Cost is: %-10.4fn",sum); getch(); /*循環(huán)換入換出,直到檢驗(yàn)數(shù)為非負(fù)數(shù)*/*循環(huán)決定換入變量 */while(1) /*位勢置初值Ui,Vi=1.0e15 */ for(i=0;i<m;i+) u(i)=1.0e15; for(j=0;j<n;j+) v(j)=1.0e15; /*求位勢*/ l=0;u(0)=0; for(i=0;i<m;i+) for(j=0;j<n;j+) if(u(i)>=1.0e15&&v(j)>
16、;=1.0e15&&x(i,j)<1.0e15) cpi(l)=i;cpj(l)=j;l+; /*記錄未求過位勢的位置*/ else if(x(i,j)<1.0e15&&u(i)<1.0e15) v(j)=c(i,j)-u(i); else if(x(i,j)<1.0e15&&v(j)<1.0e15) u(i)=c(i,j)-v(j); /*end for j */ /*end for i */ /*按記錄位置求其余位勢*/ if(l>0) while(1) ip=0; for(k=0;k<l;k+) i
17、=cpi(k);j=cpj(k); if(u(i)>=1.0e15)&&(v(j)>=1.0e15)&&(x(i,j)<1.0e15) cpi(ip)=i;cpj(ip)=j;ip+; /*記錄未求過位勢的位置*/ else if(x(i,j)<1.0e15&&u(i)<1.0e15) v(j)=c(i,j)-u(i); else if(x(i,j)<1.0e15&&v(j)<1.0e15) u(i)=c(i,j)-v(j); /*end for k */ if(ip=0)break; l
18、=ip; /*end for while */ /*end if l */#ifdef debugprintf("nU(i):");for(i=0;i<m;i+) printf("%10.2f",u(i); printf("nV(j):");for(j=0;j<n;j+) printf("%10.2f",v(j); printf("n");#endif/*求檢驗(yàn)數(shù)*/for(i=0;i<m;i+) for(j=0;j<n;j+) s(i,j)=1.0e15; if(x(i
19、,j)>=1.0e15) s(i,j)=c(i,j)-u(i)-v(j); /*求最小檢驗(yàn)數(shù)*/Cmin=1.0e15;for(i=0;i<m;i+) for(j=0;j<n;j+) if(Cmin>s(i,j) Cmin=s(i,j);I0=i;J0=j; #ifdef debug printf("ncheck number:n"); for(i=0;i<m;i+) for(j=0;j<n;j+) printf("s(%d,%d)=%-10.2fn",i,j,s(i,j); printf("n")
20、; printf("Smin=%-10.2f",Cmin); getch(); #endifif(Cmin>=0) return; /*已經(jīng)得到最優(yōu)解,返回主程序*/*此時(shí)找到了入基變量X(I0,J0) */*求閉回路*/for(k=0;k<MN1;k+) cpf(k)=-1; /*end for k */cpi(0)=I0;cpj(0)=J0;k=0;while(1) f=cpf(k); /*設(shè)置閉回路搜索方向*/ while(1) i=cpi(k);j=cpj(k); fc=0; f+; cpf(k)=f; if(f>=4)break; /*避免反向搜
21、索*/ if(k>0) if(f=0&&cpf(k-1)=2) continue; else if(f=1&&cpf(k-1)=3)continue; else if(f=2&&cpf(k-1)=0)continue; else if(f=3&&cpf(k-1)=1)continue; if(f=0) /*沿J+方向搜索*/ while(1) j+; if(j>=n)fc=2;break; if(i=I0)&&(j=J0) fc=1;break; if(s(i,j)>=1.0e15) fc=3;b
22、reak; /*end j+ */ else if(f=1) /*沿i-方向搜索*/ while(1) i-; if(i<0)fc=2;break; if(i=I0)&&(j=J0)fc=1;break; if(s(i,j)>=1.0e15)fc=3;break; /*end if=1 */ else if(f=2) /*沿J-方向搜索*/ while(1) j-; if(j<0)fc=2;break; if(i=I0)&&(j=J0)fc=1;break; if(s(i,j)>=1.0e15)fc=3;break; /*end f=2
23、*/ else if(f=3) /*沿I+方向搜索*/ while(1) i+; if(i>=m)fc=2;break; if(i=I0)&&(j=J0)fc=1;break; if(s(i,j)>=1.0e15)fc=3;break; /*end f=3 */ if(fc=1)|(fc=3)break;/*end while flag 2 */if(fc=0) /*沿些方向搜索失敗,退回回到前一點(diǎn)*/ k-; else if(fc=1)break; /*搜索完成*/ else if(fc=3) /*沿此方向搜索成功,前進(jìn)一點(diǎn)*/ k+; cpi(k)=i;cpj(k)=j; #ifdef debug p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年春七年級語文下冊 第三單元 12 賣油翁說課稿 新人教版
- 12古詩三首《己亥雜詩》說課稿-2024-2025學(xué)年語文五年級上冊統(tǒng)編版
- 15 分享真快樂(說課稿)2023-2024學(xué)年統(tǒng)編版道德與法治 一年級下冊001
- 2025裝修工程泥工承包合同
- 7讓弦發(fā)出高低不同的聲音 說課稿-2024-2025學(xué)年科學(xué)四年級上冊教科版
- 2024-2025學(xué)年高中歷史 專題四 王安石變法 一 積貧積弱的北宋教學(xué)說課稿 人民版選修1
- 14 請幫我一下吧 第一課時(shí) 說課稿-2023-2024學(xué)年道德與法治一年級下冊統(tǒng)編版
- 6我們神圣的國土 第1課時(shí)(說課稿)-部編版道德與法治五年級上冊
- 2023八年級英語下冊 Module 1 Feelings and impressions Unit 2 I feel nervous when I speak Chinese第三課時(shí)說課稿 (新版)外研版
- 2024-2025學(xué)年新教材高中語文 第二單元 6.2 文氏外孫入村收麥說課稿(3)部編版必修上冊
- 2024年計(jì)算機(jī)二級WPS考試題庫
- 廣東省廣州黃埔區(qū)2023-2024學(xué)年八年級上學(xué)期期末數(shù)學(xué)試卷(含答案)
- 法理學(xué)課件馬工程
- 《無菌檢查培訓(xùn)》課件
- 2024-2030年中國香菇行業(yè)銷售狀況及供需前景預(yù)測報(bào)告
- 高中英語必背3500單詞表(完整版)
- GB/T 44570-2024塑料制品聚碳酸酯板材
- 禁止送禮的協(xié)議書
- 2024年版《輸變電工程標(biāo)準(zhǔn)工藝應(yīng)用圖冊》
- 2024年高考數(shù)學(xué)試卷(北京)(空白卷)
- 2024從洞見到生意:阿里健康特色人群消費(fèi)趨勢報(bào)告-阿里健康x一財(cái)商學(xué)院
評論
0/150
提交評論