算法笔记回溯法旅行员售货问题和圆排列问题_精品文档.docx
- 文档编号:1521961
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:10
- 大小:92.63KB
算法笔记回溯法旅行员售货问题和圆排列问题_精品文档.docx
《算法笔记回溯法旅行员售货问题和圆排列问题_精品文档.docx》由会员分享,可在线阅读,更多相关《算法笔记回溯法旅行员售货问题和圆排列问题_精品文档.docx(10页珍藏版)》请在冰豆网上搜索。
1、旅行员售货问题
问题描述
某售货员要到若干城市去推销商品,已知各城市之间的路程(旅费),他要选定一条从驻地出发,经过每个城市一遍,最后回到驻地的路线,使总的路程(总旅费)最小。
问题分析
旅行售货员问题的解空间是一棵排列树。
对于排列树的回溯法与生成1,2,……n的所有排列的递归算法Perm类似。
开始时x=[1,2,……n],则相应的排列树有x[1:
n]的所有排列构成。
在递归算法Backtrack中,当i=n时,当前扩展节点是排列树的叶节点的父节点。
此时算法检测图G是否存在一条从顶点x[n-1]到顶点x[n]的边和一条从顶点x[n]到顶点1的边。
如果这两条边都存在,则找到一条旅行员售货回路。
此时,算法还需要判断这条回路的费用是否优于已找到的当前最优回流的费用bestc。
如果是,则必须更新当前最优值bestc和当前最优解bestx。
当i 图G中存在从顶点x[i-1]到顶点x[i]的边时,x[1: i]构成图G的一条路径,且当x[1: i]的费用小于当前最优值时算法进入树的第i层,否则将剪去相应的子树。 算法具体代码如下: [cpp] viewplain copy 1.//5d9 旅行员售货问题 回溯法求解 2.#include "stdafx.h" 3.#include 4.#include 5.using namespace std; 6. 7.ifstream fin("5d9.txt"); 8.const int N = 4;//图的顶点数 9. 10.template 11.class Traveling 12.{ 13. template 14. friend Type TSP(Type **a, int n); 15. private: 16. void Backtrack(int i); 17. int n, // 图G的顶点数 18. *x, // 当前解 19. *bestx; // 当前最优解 20. Type **a, // 图G的领接矩阵 21. cc, // 当前费用 22. bestc; // 当前最优值 23. int NoEdge; // 无边标记 24. }; 25. 26.template 27.inline void Swap(Type &a, Type &b); 28. 29.template 30.Type TSP(Type **a, int n); 31. 32.int main() 33.{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 笔记 回溯 旅行 售货 问题 排列 精品 文档