旅行者问题
来源:互联网 发布:国产家具品牌 知乎 编辑:程序博客网 时间:2024/05/04 05:56
基本数据结构省略了,用队列存储状态,即还剩下哪些点没有访问过.然后采取回溯算法进行遍历.
#include "stdafx.h"#include "队列ADT.h"#include "math.h"#include "string.h"#define N 4#define Number (1<<N) -1#define Infinity 1000int AllDistance[N][Number] = {0};int CurrentPath[N][Number];int Find(int start,int Current,int Num,queue NodeCollection,int C[][N]){ int Count = 0; int Nextnode; int Distance = Infinity,NextDistance; if(NodeCollection->size == 0)//如果点集为空 { CurrentPath[Current][Num] = start; return C[Current][start]; } else { while(Count++!=NodeCollection->size)//遍历队列中所有点 { Nextnode = Dequeue(NodeCollection);//从队列中取出一点作为下个目的点 if(AllDistance[Nextnode][Num-(1<<Nextnode)]!=0&&NodeCollection->size!=1) NextDistance = AllDistance[Nextnode][Num-(1<<Nextnode)];//已经计算过相关数据,不用递归 else//没有相关数据 NextDistance = Find(start,Nextnode,Num-(1<<Nextnode),NodeCollection,C); Enqueue(NodeCollection,Nextnode); if(C[Current][Nextnode] + NextDistance < Distance) { Distance = C[Current][Nextnode] + NextDistance;//将最短路径更新 AllDistance[Current][Num] = Distance;//将相关记录记录 CurrentPath[Current][Num] = Nextnode; //记录路径 } } return Distance; }}void ReadNodeintoQueue(queue Q){ for(int i = 0;i<=N-1;i++) Enqueue(Q,i);}int FindMin(int C[][N]){ int start,Minstart; int Distance,MinDistance = Infinity; queue Q = (queue)malloc(sizeof(Queue)); Initialize(Q,N); ReadNodeintoQueue(Q); for(int i = 0;i<=N-1;i++)//选择一个起始点 { start = Dequeue(Q); Distance = Find(start,start,Number-(1<<start),Q,C); Enqueue(Q,i); printf("%d: %d\n",i,Distance); if(Distance < MinDistance) { Minstart = start; MinDistance = Distance; } } return MinDistance;}int _tmain(int argc, _TCHAR* argv[]){ int x = (1<<4); queue Q = (queue)malloc(sizeof(Queue)); Initialize(Q,5); int MinDistance; int C[N][N]; for (int i = 0;i<=N-1;i++) { for(int j = 0;j<=N-1;j++) { if(i == j) C[i][j] = 0; else C[i][j] = Infinity; } } C[0][1] = 1; C[0][2] =1; C[1][0] = 1; C[1][2] = 2; C[1][3] = 7; C[2][0] = 1; C[2][3] = 9; C[3][0] = 4; C[3][2] = 9; MinDistance = FindMin(C); return 0;}
0 0
- 旅行者问题
- 旅行者问题
- 旅行者
- 旅行者
- 旅行者
- 旅行者
- 旅行者
- 旅行者
- 求旅行者旅行费用问题
- mTSP(多旅行者哈密顿 图问题)
- 大O表示法及旅行者问题
- TSP(旅行者问题)——动态规划详解
- TSP(旅行者问题)——动态规划详解
- “红蓝眼人”问题中旅行者说的话的作用
- 在matlab上实现遗传算法解决TSP旅行者问题
- BNU10792:沙漠旅行者
- 练习赛10.1.旅行者
- BZOJ4456: [Zjoi2016]旅行者
- mysql优化篇(一)
- ASO优化之AppStore规则介绍
- 敏捷开发和瀑布开发
- 基于boost.asio的echo服务器2
- phpcms v9附件上传后显示链接名称如何改为附件名称?
- 旅行者问题
- 【IOS 开发学习总结-OC-6】objective-c 的数组
- ASP.NET中的几种弹出框提示基本实现方法
- Android 学习资源
- 黑马程序员------Java基础(其他对象)
- 于overload(重载),override(覆盖),overwrite(重写)
- vs2012下编译protobuf
- Permutation Recovery(排列恢复)
- 为什么C++编译器不支持模板头文件和实现代码分离的编译