Dijkstra算法的C++实现
2014-05-20 17:19
246 查看
#include <iostream> #include <vector> #include <queue> #define MAX_VALUE 1000 using namespace std; int **a; int num_ver; int *pre; void init();//初始化全局变量 void readData();//读取数据 void ShortPath(int v);//寻找最短路径 void printPath(int pre[],int v,int u);//输出最短路径 int findMin(int dis[],bool s[]);//寻找下一个最短的路径 void init() { cout << "Please input the number of vertexs:"; cin >> num_ver; a = new int*[num_ver]; for(int i = 0; i < num_ver; i++) { a[i] = new int[num_ver]; } pre = new int[num_ver]; } void readData() { cout << "Please input the adjacency matrix:" << endl; for(int i = 0; i < num_ver; i++) { for(int j = 0; j < num_ver; j++) { cin >> a[i][j]; } } } void ShortPath(int v) { int dis[num_ver]; bool s[num_ver]; int u; for(int i = 0; i < num_ver; i++) { if(i != v) { s[i]=0; dis[i] = a[v][i]; if(dis[i] == MAX_VALUE) { pre[i] = -1; } else { pre[i] = v; } } } s[v] = 1;//选中V节点 dis[v] = 0; for(int i = 1; i < num_ver; i++) { u = findMin(dis,s);//找下一个最短的路径 s[u] = 1; for(int j = 1; j < num_ver; j++)//更新链接矩阵 { if(s[j] == 0&&dis[u] + a[u][j] < dis[j]) { dis[j] = dis[u]+a[u][j]; pre[j] =u; } } } } int findMin(int dis[],bool s[]) { int min; int i,k; for(i = 0; s[i] == 1&&i < num_ver; i++); min = dis[i]; k = i; for(i = i + 1; i < num_ver; i++) { if(s[i] == 0&&dis[i] < min) { k = i; min = dis[i]; } } return k; } void printPath(int pre[],int v,int u) { queue<int> que; int tmp = u; while(tmp!=v) { que.push(pre[tmp]); tmp = pre[tmp]; } while(!que.empty()) { cout<<que.front()<<'\t'; que.pop(); } } int main() { init(); readData(); ShortPath(0); printPath(pre,0,num_ver - 1); return 0; }
相关文章推荐
- 最短路径问题——Dijkstra算法(C++实现)
- Dijkstra算法的C++实现
- Dijkstra算法的C++实现
- Dijkstra算法的C++实现
- c++中关于最短路径问题的Dijkstra算法的实现
- 单源最短路径Dijkstra算法C++实现
- Dijkstra算法的C++实现
- Dijkstra算法研究(深度解析/C++实现)
- C++实现Dijkstra算法
- C++Dijkstra算法实现
- Dijkstra算法 c/c++实现
- 单源最短路径Dijkstra算法C++实现
- Dijkstra算法C++的实现
- 数据结构与算法——最短路径Dijkstra算法的C++实现
- 图论算法:最短路径——无权最短路径算法和Dijkstra算法C++实现
- C++实现最短路算法——Dijkstra算法
- 邻接表的c++实现 及 Dijkstra算法
- Dijkstra算法的C++实现
- 数据结构与算法——最短路径Dijkstra算法的C++实现
- Dijkstra算法(c++实现)