哈密顿图源代码.doc_第1页
哈密顿图源代码.doc_第2页
哈密顿图源代码.doc_第3页
哈密顿图源代码.doc_第4页
哈密顿图源代码.doc_第5页
免费预览已结束,剩余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; 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+) 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;tjcitynumber;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+) 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; /*初始化visibility 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+) 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;icitynumber;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; 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; if (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=tabushort2shoi; /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;i5c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论