- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
旅行商售货员问题的分支限界算法
姓名: 学号:
一、实验目的与要求
1、掌握旅行商售货员问题的分支限界算法;
2、区分分支限界算法与回溯算法的区别,加深对分支限界法的理解。
二、实验题:
编程实现:某售货员要到若干城市去推销商品,已知各城市之间的路程 或旅费 。他要选定一条从驻地出发,经过每个城市一次,最后回到驻地的路线,使总的路程 或总旅费 最小。
三、实验提示
旅行商问题的解空间是一个排列树。有两种实现的方法。第一种是只使用一个优先队列,队列中的每个元素 中都包含到达根的路径。另一种是保留一个部分解空间树和一个优先队列,优先队列中 的元素并不包含到达根的路径。以下为第一种方法。
由于我们要寻找的是最小耗费的旅行路径,因此可以使用最小耗费分枝定界法。在实现过程中,使用一个最小优先队列来记录活节点,队列中每个节点的类型为MinHeapNode。每个节点包括如下区域: x(从1到n的整数排列,其中x[0] 1 )#include #include using namespace std;
//
#define MAX_CITY_NUMBER 10 //城市最大数目
#define MAX_COST//两个城市之间费用的最大值
//
int City_Graph[MAX_CITY_NUMBER][MAX_CITY_NUMBER]; //表示城市间边权重的数组
int City_Size; //表示实际输入的城市数目
int Best_Cost; //最小费用
int Best_Cost_Path[MAX_CITY_NUMBER]; //最小费用时的路径 //
typedef struct Node int lcost; //优先级 int cc; //当前费用 int rcost; //剩余所有结点的最小出边费用的和 int s; //当前结点的深度,也就是它在解数组中的索引位置 int x[MAX_CITY_NUMBER]; //当前结点对应的路径 struct Node* pNext; //指向下一个结点 Node;
//
typedef struct MiniHeap Node* pHead; //堆的头 MiniHeap;
//初始化
void InitMiniHeap MiniHeap* pMiniHeap pMiniHeap- pHead new Node; pMiniHeap- pHead- pNext NULL; //入堆
void put MiniHeap* pMiniHeap,Node node Node* next; Node* pre; Node* pinnode new Node; //将传进来的结点信息copy一份保存 //这样在函数外部对node的修改就不会影响到堆了 pinnode- cc node.cc; pinnode- lcost node.lcost; pinnode- pNext node.pNext; pinnode- rcost node.rcost; pinnode- s node.s; pinnode- pNext NULL; for int k 0;k City_Size;k++ pinnode- x[k] node.x[k]; pre pMiniHeap- pHead; next pMiniHeap- pHead- pNext; if next NULL pMiniHeap- pHead- pNext pinnode; else while next ! NULL if next- lcost pinnode- lcost //发现一个优先级大的,则置于其前面 pinnode- pNext pre- pNext; pre- pNext pinnode; break; //跳出 pre next; next next- pNext; pre- pNext pinnode; //放在末尾 //出堆
Node* RemoveMiniHeap MiniHeap* pMiniHeap Node* pnode NULL; if pMiniHeap- pHead- pNext ! NULL pnode pMiniHeap- pHead- pNext; pMiniHeap- pHead- pNext pMiniHeap- pHead- pNext- pNext; return pnode; //
void Traveler int i,j; int temp_x[MAX_CITY_NUMBER]; Node* pN
您可能关注的文档
最近下载
- 安徽省合肥重点中学2023-2024学年九年级上学期期中物理试卷(含解析).docx VIP
- 高中数学开学第一课-如何学好高中数学优秀课件p.pptx VIP
- 有机化学题库(附答案).pdf VIP
- 江苏省苏州市常熟市2023届六年级小升初真题数学试卷(含解析).doc VIP
- 《中小企业划型标准规定》(工信部联企业〔2023〕300号文件).docx VIP
- GB_T 36548-2018 电化学储能系统接入电网测试规%%%%%%%%%%%%%%%%%.pdf VIP
- 部编版语文五年级上册第3单元教材分析教学设计.doc VIP
- 2025年高考天津卷英语高考真题(原卷版).pdf VIP
- 新高考高中数学 题型全归纳(解析版).pdf VIP
- 2010年初中化学专题二 指导学生从化学视角认识“身边的物质”.doc VIP
文档评论(0)