




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
算法分析与设计实验报告第 六 次附加实验姓名学号班级时间12.26上午地点工训楼309 实验名称回溯法实验(图的m着色问题)实验目的1. 掌握回溯法求解问题的思想2. 学会利用其原理求解图的m着色问题实验原理问题描述:给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。这个问题是图的m可着色判定问题。若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的色数m的问题称为图的m可着色优化问题。基本解题步骤:(1) 针对所给问题,定义问题的解空间;(2) 确定易于搜索的解空间结构;(3) 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。实验步骤(1)首先将给定的图利用抽象图表示出来;(2)判断该节点k当前的着色是否符合条件,需要判断xk与k节点其他相邻节点h的xh是否相等;(3)回溯过程,如果此时的节点值已经大于节点总数,代表已经着色完成,并且找到了一种可行解,此时可以将可行解数+1;(4)回溯从最后一个节点往上回溯,并一层一层更改节点至其他可用着色,以此来找到所有的填色方案。关键代码void Color:Backtrack(int t)if(tn) /到达叶子节点 sum+; /可行解+1 cout着色: ; for(int i=1;i=n;i+) /输出可行解方案 coutxi ; coutendl; else for(int i=1;i=m;i+) xt=i; if(ok(t) Backtrack(t+1);/回溯,继续寻找下一层 xt=0;/回到最初状态,使x1继续尝试其他填色的可能解 测试结果 当输入图如下时:12435只要输入边即可结果如下: 当输入的图如下时:结果如下:实验分析通过两个实例图,将m着色问题,进行了演示,可以看到,实际上两个图相差很小,可是结果却整整翻了一倍,这可以说明在越简单的图上,着色问题越容易找到解,解的个数也就越多。其次在这个问题上我们可以看到它的解空间树并不是一颗子集树,而是真个解空间,每一个结点都会将所有的颜色遍历一遍,从而找到合适的颜色,所以这个回溯问题还是相对于之前的子集树和排列树来说,还是相对简单一点的。实验心得着色问题是最早接触的回溯法问题,一开始起始只知道回溯法就是遇到不能满足条件的时候就换一种方法,如果找不到的话就返回到上一个节点换一种方式,图的着色问题和其他的着色问题很相似,但是更简单,因为它的限制条件只有一个,即相邻区域着色不能相同,当转化成抽象图时,即两个有连线的节点之间着色不能相同,而且不需要建立一个子集树来进行回溯,但是这个有一个问题就是继续寻找下一层之后有一条语句是使xt=0,这条语句之前一直不能理解是什么意思,后来经过一些数据的手动测试,发现这个案例使用回溯法是使用了递归的方法,因此当完成叶子节点层之后,会回溯到其上一层,又重新更改其到另一种色号,在回溯叶子节点层,当这一层的所有颜色都尝试过之后,又会使再上一层的改变色号,再更改下两层色号,这样做的目的是因为回溯法可以找到所有的可行解,这样就通过回溯找到了所有的可行解。这个实验的完成是我更加熟悉了回溯法的原理和思想。实验得分助教签名附录:完整代码(回溯法)/图的m着色问题 回溯法求解#includeusing namespace std;class Colorfriend void mColoring(int,int,int *);private:bool ok(int k);void Backtrack(int t);int n, /图的顶点个数 m, /可用颜色数*a, /图的邻接矩阵*x; /当前解 long sum; /当前已找到的可m着色的方案数 ;bool Color:ok(int k) /检查颜色可用性 for(int j=1;jn) /到达叶子节点 sum+; /可行解+1 cout着色: ; for(int i=1;i=n;i+) /输出可行解方案 coutxi ; coutendl; else for(int i=1;i=m;i+) xt=i; if(ok(t) Backtrack(t+1);/回溯,继续寻找下一层 xt=0;/回到最初状态,使x1继续尝试其他填色的可能解 void mColoring(int n,int m,int *a)Color X;/初始化XX.n=n;X.m=m;X.a=a;X.sum=0;int *p=new intn+1;for(int i=0;i=n;i+) pi=0;X.x=p;cout顶点: ;for(int i=1;i=n;i+) /用于输出结果 couti ; coutendl;X.Backtrack(1); /从顶点1开始回溯delete p;cout解法个数:X.sumendl;int main()int n;int m;coutn;coutm;int *a=new int*n+1;for(int i=0;i=n;i+) ai=new intn+1;for(int i=0;i=n;i+) /利用抽象图实现图的邻接矩阵 for(int j=0;j=n;j+) aij=0;int edge; coutedge;int v,w;coutplease inout adjacent edge:e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025抵押借款合同协议模板
- 2025合作伙伴合同转让协议
- 汽修店雇工合同范本
- 遗失补签合同范本
- 装修顶房合同范本
- 2025电影特效制作服务合同
- 小区翻新清洗合同范本
- 配件合作合同范本
- 经委房屋出售合同范本
- 欠款个人担保合同范本
- 巡察整改工作课件模板
- 2025年事业单位工勤技能-河南-河南农机驾驶维修工一级(高级技师)历年参考题库含答案解析(5套)
- 医务人员职业道德准则理论试题
- 2025年幼儿园教师岗位聘任协议(含资格认证及薪酬激励)
- 成都东部集团有限公司招聘考试真题2024
- 银行收息管理办法
- 海外房产投资项目方案(3篇)
- 消防员心理健康课件
- 初中地理学科课程规划方案
- 定额〔2025〕1号文-关于发布2018版电力建设工程概预算定额2024年度价格水平调整的通知
- 电子束曝光机说明书
评论
0/150
提交评论