哈密顿图源代码.doc

上传人:s9****2 文档编号:563031195 上传时间:2023-04-29 格式:DOC 页数:6 大小:35.51KB
返回 下载 相关 举报
哈密顿图源代码.doc_第1页
第1页 / 共6页
哈密顿图源代码.doc_第2页
第2页 / 共6页
哈密顿图源代码.doc_第3页
第3页 / 共6页
哈密顿图源代码.doc_第4页
第4页 / 共6页
哈密顿图源代码.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《哈密顿图源代码.doc》由会员分享,可在线阅读,更多相关《哈密顿图源代码.doc(6页珍藏版)》请在金锄头文库上搜索。

1、#include#include#include#include#define citynumber 11#define Q 100#define p 0.5#define NM2 1000#define A 1#define B 5int ccdi=-1;/全局变量,用在myrand()中float myrand()/产生0-1随机数,100个,每调用一次,结果不同srand(time(0);float my100;ccdi+;if (ccdi=100) ccdi=0;for(int mi=0;mi100;mi+)float fav=rand()%10000; mymi=fav/10000;

2、 return myccdi;double fpkij(double Tcitynumbercitynumber,double ncitynumbercitynumber,int tabucitynumbercitynumber,int k,int s,int i,int j )/定义函数用于计算Pij /double A=0.5,B=0.5; double sumup,pkij,sumdown; sumdown=0; double aTcitynumbercitynumber,bncitynumbercitynumber; for(int aTi=0;aTicitynumber;aTi+)

3、for(int aTj=0;aTjcitynumber;aTj+) aTaTiaTj=pow(TaTiaTj,A); for(int bni=0;bnicitynumber;bni+) for(int bnj=0;bnjcitynumber;bnj+) bnbnibnj=pow(nbnibnj,B); for (int can=0;cancitynumber;can+)/判断,除掉已经走过的城市 for (int ci=0;ci=s;ci+) if(can=tabukci) aTican=0;bnican=0; sumup=aTij*bnij; for(int tj=0;tjcitynumbe

4、r;tj+) sumdown=aTitj*bnitj+sumdown; pkij=sumup/sumdown; return pkij;void main() double citycitynumber2=0,1,0,2,2,2,2,4,1,3,3,4,4,7,2,8,3,9,1,10,1,0/*,2,1,3,0,4,9,5,2,6,2,7,1,8,6,9,0,10,3*/; /*城市坐标*/ double dcitynumbercitynumber; /Ljk是城市j to k距离 for(int j=0;jcitynumber;j+) for (int k=0;kcitynumber;k+

5、) djk=sqrt(cityj0-cityk0)*(cityj0-cityk0)+(cityj1-cityk1)*(cityj1-cityk1);/ coutdjk ; /coutn; /*计算距离,从j城市到k城市*/ /*for (int cj=0;cj10;cj+) float c=myrand(); coutc n;*/输出随机数 double ncitynumbercitynumber;for(int ni=0;nicitynumber;ni+)for(int j=0;jcitynumber;j+)nnij=1/dnij;/coutnnij ;/coutn; /*初始化visibi

6、lity nij*/double Lcitynumber;int shortestcitynumber;double Tcitynumbercitynumber;for(int ti=0;ticitynumber;ti+)for (int j=0;jcitynumber;j+) Ttij=1;/coutTtij ;/coutn;/*初始化t*/ double changTcitynumbercitynumber;/step2:for(int NC=0;NCNM2;NC+)for(int cti=0;cticitynumber;cti+) for (int j=0;jcitynumber;j+)

7、 changTctij=0;/coutchangTctij ; /coutn;/*初始化changT*/ int tabucitynumbercitynumber;/tabuks表示第k只蚂蚁,第s次循环所在的城市 for (int tai=0;taicitynumber;tai+) for (int i=0;icitynumber;i+) tabutaii=0; for (int tabui1=0;tabui1citynumber;tabui1+)tabutabui10=tabui1; /*for (tai=0;taicitynumber;tai+) for (int i=0;icitynu

8、mber;i+) couttabutaii ;coutn; */ /初始化tabu for(int kk=0;kkcitynumber;kk+) Lkk=0; /第三步开始 for(int s=0;scitynumber-1;s+) for(int k=0;kcitynumber;) int ci,can; float sumpk=0; float pkij; float randnumber=myrand(); can=-1; hq2: can+; if (can=citynumber) can=0; for (ci=0;ci=s;ci+) if(can=tabukci) goto hq2;

9、 pkij=fpkij(T,n,tabu,k,s,tabuks,can); sumpk=sumpk+pkij; if (randnumbersumpk) ; else goto hq2; tabuks+1=can; k+; /第三步完成 /*for (tai=0;taicitynumber;tai+)for (int i=0;icitynumber;i+) couttabutaii ;coutn;*/输出一个循环后的tabu/第四步开始 for(int k4=0;k4citynumber;k4+) for(int s4=0,s44=0;s4citynumber;s4+) s44=s4+1; i

10、f (s44=citynumber) s44=0; Lk4+=dtabuk4s4tabuk4s44;/coutLk4 ;/计算Lkfloat shortest1=0; int short2=0;/最短距离for(int shorti=1;shorticitynumber;shorti+ )shortest1=L0; if(Lshorti=shortest1)shortest1=Lshorti;short2=shorti;/coutLshort2n;coutshort2n; for(int shoi=0;shoicitynumber;shoi+) shortestshoi=tabushort2s

11、hoi; /coutshortestshoi ;/coutn; for(int k41=0;k41citynumber;k41+) for(int s41=0,ss=0;s41citynumber;s41+) ss=s41+1; if (ss=citynumber) ss=0; changTtabuk41s41tabuk41ss+=Q/Lk41; changTtabuk41sstabuk41s41=changTtabuk41s41tabuk41ss; /* for(int cti4=0;cti4citynumber;cti4+) for (int j=0;jcitynumber;j+)coutchangTcti4j ;coutn; */ /第四步完 / 第五步开始 for(int i5=0;i5citynumber;i5+) for(int j5=0;j5citynumber;j5+) Ti5j5=p*Ti5j5+changTi5j5;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号