首页 回溯算法经典问题算法:0-1背包,旅行商问题,N后问题,N排列,素数环,装载问题,批处理问题,.doc

回溯算法经典问题算法:0-1背包,旅行商问题,N后问题,N排列,素数环,装载问题,批处理问题,.doc

举报
开通vip

回溯算法经典问题算法:0-1背包,旅行商问题,N后问题,N排列,素数环,装载问题,批处理问题,.doc回溯算法经典问题算法:0-1背包,旅行商问题,N后问题,N排列,素数环,装载问题,批处理问题,.doc 0-1背包 float Bound(int i,int *v,int *w) { int left=c-cw; /*剩余容量*/ float b=(float)cv; while (in) /*到叶结点*/ { for (j=1;jbestv)/*搜索右子树*/ { x[i]=0; Backtrack(i+1,v,w,x); } } } 旅行商问题 ublic static void ba...

回溯算法经典问题算法:0-1背包,旅行商问题,N后问题,N排列,素数环,装载问题,批处理问题,.doc
回溯算法经典问题算法:0-1背包,旅行商问题,N后问题,N排列,素数环,装载问题,批处理问题,.doc 0-1背包 float Bound(int i,int *v,int *w) { int left=c-cw; /*剩余容量*/ float b=(float)cv; while (i<=n&&w[i]<=left) { left-=w[i]; b+=v[i]; i++; } /*装满背包*/ if (i<=n)b+=(float)(v[i]/w[i])*left; return b; } void Backtrack(int i,int *v,int *w,int *x) {int j,t; if(i>n) /*到叶结点*/ { for (j=1;j<=n;j++) bestx[j]=x[j]; bestv=cv; } else { if (cw+w[i]<=c)/*搜索左子树*/ {x[i]=1; cw+=w[i]; cv+=v[i]; Backtrack(i+1,v,w,x); cw-=w[i]; cv-=v[i]; } if (Bound(i+1,v,w)>bestv)/*搜索右子树*/ { x[i]=0; Backtrack(i+1,v,w,x); } } } 旅行商问题 ublic static void backtrack(int t) p { //到解空间数叶结点的处理 if(t > n - 1) { v += dist[0][x[n - 1]]; if(v < bestV) { bestV = v; for(int i = 0; i < n; i++) bestX[i] = x[i]; } System.out.println(v); v -= dist[0][x[n - 1]]; return; }/////////////////////// for(int i = t; i < n; i++) { swap(x, i, t); v += dist[x[t - 1]][x[t]]; //剪枝函数 if (v < bestV) backtrack(t + 1); v - = dist[x[t - 1]][x[t]]; swap(x, i, t); } }//end N后问题 Place(int k) { for(int j=1;j<=k;j++) ,if( asb(k-j)==asb(x[k]-x[j] ) )||(x[j]==x[k]) return false;, else return true; } void Queen:Backtrack(int t) { if(t>n) sum++; else for(int i=1;i<=n;i++) { x[t]=i; if(Place(t)) Backtrack(t+1); } } N排列 int perm(int b[], int i) { int k,j,temp; if(i==num) //num即N { for(k=1;k<=num;k++) cout<n) { if(isprime(a[1]+a[n])) printresult(); return; } else { for(i=m;i<=n;i++) { swap(a[m],a[i]); if(isprime(a[m-1]+a[m])) search(m+1); swap(a[i],a[m]); } }//ENDELSE }//END 装载问题 void Loading:Backtrack(int i) //搜索至第i 层 { //到达叶节点 if(ibestw){for(j=1;j<=n;j++)bestw[j]=x[j]; bestw=cw;} return; } //搜索子树 r - = w[i]; if(cw+w[i]<=c) //搜索左子树 { x[i]=1; cw+=w[i]; Backtrack(i+1); cw - = w[i]; } if(cw+r>bestw) //搜索右子树 { x[i]=0; Backtrack(i+1); } r+=w[i]; } 批处理问题 public static void trackback(int i) { if(i>n) { for(int j=1;j<=n;j++) bestx[j]=x[j]; bestf=f ; } else for(int j=i;j<=n;j++) { f1+=M[x[j]] [1];//M[i][j]是第i个作业第j步需要时间 f2[i]=( (f2[i-1]>f1) ? f2[i-1]:f1 )+M[x[j]] [2]; f+=f2[i]; if(f
本文档为【回溯算法经典问题算法:0-1背包,旅行商问题,N后问题,N排列,素数环,装载问题,批处理问题,&#46;doc】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_829858
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:6
分类:生活休闲
上传时间:2017-11-17
浏览量:58