回溯法求解TSP问题_第1页
回溯法求解TSP问题_第2页
回溯法求解TSP问题_第3页
回溯法求解TSP问题_第4页
回溯法求解TSP问题_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、人工智能实验报告实验名称:TSP问题姓名:xxx学号:xxx xx大学计算机学院 2014年1月14日1 实验目的 掌握递归回溯法的思想,能够求解TSP问题,增强自己的编程能力.2 实验内容 下图是5个城市的交通图,城市之间的连线权重表示城市之间路程的费用。要求从A城出发,经过其它城市一次且仅一次,最后回到A城,找出一条费用最低的回路。请用伪代码形式描述所设计的算法。 3、 回溯法思想:回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称

2、为“回溯点”。若已有满足约束条件的部分解,不妨设为(x1,x2,x3,xi),In,则添加x(i+1)属于s(i+2),检查 (x1,x2,xi,x(i+1)是否满足条件,满足了就继续添加x(i+2)、s(i+2),若所有的x(i+1)属于s(i+1)都不能得到 部分解,就去掉xi,回溯到(xi,x2,x(i- 1),添加那些未考察过的x1属于s1,看其是否满足约束条件,为此反复进行,直至得到解或证明无解。4、 算法流程:Backtracking(回溯法) 递归调用回溯法如果城市id=0并且深度等于5?否是通过比较,找到最小的距离 否,返回是 则返回,输出最小距离,记录最优解5、 关键技术:1

3、、 使用了递归回溯法,通过递归调用,节省了代码量,使代码更简洁易懂。关键代码:void Backtracking(int cityId, int depth, int len) /正走到的城市的节点号 经过的节点数 走过的长度 if (cityId = 0 & depth = 5) /如果从A节点出发又回到A节点,且经过刚好走过所有城市所得的长度值较小,则替换minDis if (len = minDis) /如果长度值较大,直接回溯选择下一个城市 return; for (int i = 0; i tabcityId.size(); i+) /nodeId表示当前城市,i表示与其相连的城市

4、if (hasVistabcityIdi.second = false) /当与cityID城市连接的城市没有被访问过 hasVistabcityIdi.second = true;pretabcityIdi.second = cityId; Backtracking(tabcityIdi.second, depth + 1, len + tabcityIdi.first); /递归调用,直到走完5个节点pretabcityIdi.second = -1;/返回上一层 hasVistabcityIdi.second = false; /false表示没有走过这个城市 2、 把原问题需要的数据存

5、放在了txt文件当中,通过读取文件来读取题目要求,使得操作更简单关键代码:void getTab() /用户输入城市信息 int u, /城市uv, /城市vw; /uv之间的距离 /printf(Inputing ends up with -1 -1 -1n); while (1) fscanf(fp,%d %d %d, &u, &v, &w); if (u = -1 & v = -1 & w = -1) break; tabu.push_back(PII(w, v); /对于城市u来说,uv之间的距离是w tabv.push_back(PII(w, u); /对于城市v来说也是一样 3、 使用了vector容器,更有利于存放子空间的解,避免了使用数组不当造成的相关问题。typedef pair PII;/定义类型存放城市的相邻城市和它们之间的费用vector tab10;tabu.push_back(PII(w, v);tabnodeIdi.first tabnodeIdi.second6、 实验心得1、 重温了算法课程里面学过的回溯法,强化了这种编程思想。2、 深刻理解了递归调用的思想。3、 学习了容器这样一种结

温馨提示

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

评论

0/150

提交评论