回溯问题:m点着色、n皇后、tsp递归迭代算法.docVIP

回溯问题:m点着色、n皇后、tsp递归迭代算法.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
回溯问题:m点着色、n皇后、tsp递归迭代算法

PAGE  PAGE 7 m着色 回溯法 递归 //输入n为顶点个数,颜色数m,图的邻接矩阵c[][] //输出n个顶点的着色x[] //递归方法求解 #include iostream using namespace std; bool c[6][6]; int x[6]; int m=3; int n=5; bool ok(int k) //判断对顶点k着色以后是否合法着色 { int i; for(i = 1; i k; i++) if((c[k][i]==1 x[k] == x[i])) return false; return true; } void output(int x[]) { coutThe feasible result is:endl; for(int i=1;i=n;i++) coutx[i] ; coutendl; return; } void backtrack (int t) { if (tn) output(x); else for (int i=1;i=m;i++) { x[t]=i; if (ok(t)) backtrack(t+1); x[t]=0; } } int main() { int i, j; for(i = 1; i 5; i++) for(j = 1; j 5; j++) c[i][j] = false; c[1][2] = true; c[1][3] = true; c[2][3] = true; c[2][4] = true; c[2][5] = true; c[3][5] = true; c[4][5] = true; c[2][1] = true; c[3][1] = true; c[3][2] = true; c[4][2] = true; c[5][2] = true; c[5][3] = true; c[5][4] = true; backtrack(1); cout endl; return 0; } m着色 回溯法 迭代 //输入n为顶点个数,颜色数m,图的 邻接矩阵c[][]//输出n个顶点的着色 x[] //第一个结点也可以有m种着色方案 #include iostream using namespace std; bool c[6][6]; int x[6]; int m=3; int n=5; bool ok(int k) //判断对顶点k着色以后是否合法着色 { int i; for(i = 1; i k; i++) if((c[k][i]==1 x[k] == x[i])) return false; return true; } void m_coloring(int n, int m) { int i, k; for(i = 1; i = n; i++) x[i] = 0; k =1; while(k =1) { x[k]++; while(x[k] = m) if( ok(k)==1) break; else x[k]++; if(x[k] = m k==n) { for(i=1;i=n;i++) coutx[i] ; coutendl; k--; //return; 如果只需要一个解可以将上两句去掉,加入返回语句 } else if (x[k]=m kn) k++; else{ x[k]=0; k--; } } } int main() { int i, j; for(i = 1; i 5; i++) for(j = 1; j 5; j++) c[i][j] = false; c[1][2] = true; c[1][3] = true; c[2][3] = true; c[2][4] = true; c[2][5] = true; c[3][5] =

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档