用迪杰斯特拉算法求赋权图中的最短路径
来源:互联网 发布:mac安装战网失败 编辑:程序博客网 时间:2024/06/05 14:42
描述
用迪杰斯特拉算法求一点到其余所有结点的最短路径。
输入
先输入一个小于100的正整数n,然后的n行输入图的邻接矩阵(10000表示无穷大,即两点之间没有边),最后输入两个0到n-1的整数表示两个点,
输出
用迪杰斯特拉算法求第一个点到其余所有结点的最短路径。
并输出这两个点之间的最短路径(按顺序输出最短路径上的每一个点,每个数据占一行)。
并输出这两个点之间的最短路径(按顺序输出最短路径上的每一个点,每个数据占一行)。
输入样例
4
0 2 10 10000
2 0 7 3
10 7 0 6
1000 3 6 0
0 2
0 2 10 10000
2 0 7 3
10 7 0 6
1000 3 6 0
0 2
输出样例
0
1
1
2
#include <iostream>#include <cstdio>#include <cstring>#include <stack>#include <stdlib.h>using namespace std;const int maxnum = 130;const int maxint = 10000;void Dijkstra(int n, int v, int *dist, int *prev, int matrix[maxnum][maxnum]){ bool visited[maxnum]; int i, j; for(i = 1; i <= n; i++) { dist[i] = matrix[v][i]; visited[i] = 0; if(dist[i] == maxint) prev[i] = 0; else prev[i] = v; } dist[v] = 0; visited[v] = 1; // 依次将未放入S集合的结点中,取dist[]最小值的结点,放入结合S中 // 一旦S包含了所有V中顶点,dist就记录了从源点到所有其他顶点之间的最短路径长度 for(i = 2; i <= n; i ++) { int temp = maxint; int u; for(j = 1; j <= n; j++) { if((visited[j]==0)&&(dist[j]<temp)) { u = j; temp = dist[j]; } } visited[u] = 1; for(j = 1; j <= n; j++) { if((visited[j]==0)&&(matrix[u][j]<maxint)) { int newdist = dist[u]+matrix[u][j]; if(newdist<dist[j]) { dist[j] = newdist; prev[j] = u; } } } }}void searchPath(int *prev, int u, int v){ stack<int>s; while(v!=u){s.push(v);v = prev[v];}s.push(v); while(!s.empty()) { cout << s.top()-1 << endl; s.pop(); }}int main(){ //freopen("test.txt", "r", stdin); int dist[maxnum]; int prev[maxnum]; int matrix[maxnum][maxnum]; int n; cin >> n; int i, j; for(i = 1; i <= n; i++) { for(j = 1; j <= n; j ++) { cin >> matrix[i][j]; } } int x, y; cin >> x >> y; Dijkstra(n, x+1, dist, prev, matrix);// for(i = 1; i <= n; i++)// printf("%d%c", dist[i], i == n?'\n':' '); searchPath(prev, x+1, y+1);}
0 0
- 用迪杰斯特拉算法求赋权图中的最短路径
- OSPF中的最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 最短路径算法
- 求赋权图中一个结点到所有结点的最短路径的长度
- 自动生成格雷码
- Java内存分配
- N
- 【JAVA开发之IO流1-3】IO流之缓冲流
- 用迪杰斯特拉算法求赋权图中的最短路径
- mipi调试经验
- Spring_Q_collect
- 1.Java IO教程
- flask-sqlalchemy(1)
- 一种文库类网站建设思路.md
- leetcode 133. Clone Graph
- 大数相乘,结果在2000位以内
- Java 输出流中的flush方法