最短路径(迪杰斯特拉算法)

Posted geziyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路径(迪杰斯特拉算法)相关的知识,希望对你有一定的参考价值。

求上图中从V1 到V10的最短路径技术分享图片

程序输入说明

输入图的邻接矩阵表示

程序输出说明

输出路径序列

程序输入样例

0 2 5 1 -1 -1 -1 -1 -1 -1
-1 0 -1 -1 12 14 -1 -1 -1 -1
-1 -1 0 -1 6 10 4 -1 -1 -1
-1 -1 -1 0 13 12 11 -1 -1 -1
-1 -1 -1 -1 0 -1 -1 3 9 -1
-1 -1 -1 -1 -1 0 -1 6 5 -1
-1 -1 -1 -1 -1 -1 0 -1 10 -1
-1 -1 -1 -1 -1 -1 -1 0 -1 5
-1 -1 -1 -1 -1 -1 -1 -1 0 2
-1 -1 -1 -1 -1 -1 -1 -1 -1 0

程序输出样例

1 3 5 8 10
 1 #include<iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 using namespace std;
 6 
 7 bool vis[15];
 8 int map[15][15], d[15], p[15];
 9 const int INF = 999999;
10  
11 int main()
12 {
13     for(int i = 0; i < 10; i++) {
14         for(int j = 0; j < 10; j++) {
15             cin>>map[i][j];
16             if(map[i][j] == -1)
17                 map[i][j] = INF;
18         }
19     }
20     memset(vis, 0, sizeof(vis));
21     for(int i = 0; i < 10; i++) 
22         d[i] = INF;
23     d[0] = 0;
24     for(int i = 0; i < 10; i++) {
25         int cur, min = INF;
26         for(int k = 0; k < 10; k++) {
27             if(d[k] <= min && !vis[k]) {
28                 min = d[k];
29                 cur = k;
30             }
31         }
32         vis[cur] = true;
33         for(int k = 0; k < 10; k++) {
34             if(d[k] > d[cur] + map[cur][k]) {
35                 d[k] = d[cur] + map[cur][k];
36                 p[k] = cur;
37             }
38         }
39     }
40     int dir[15];
41     int x = 9, c = 0;
42     while(x != p[x]) {
43         dir[c++] = x;
44         x = p[x];
45     }
46     dir[c] = 0;
47     for(int i = c; i > 0; i--)
48         cout<<dir[i]+1<<" "; 
49     cout<<dir[0]+1<<endl;
50     return 0;
51 }

技术分享图片

以上是关于最短路径(迪杰斯特拉算法)的主要内容,如果未能解决你的问题,请参考以下文章

图的应用——最短路径(迪杰斯特拉算法)

算法-迪杰斯特拉算法(dijkstra)-最短路径

编写的迪杰斯特拉算法求最短路径,运行不正确?

数据结构之最短路径 [迪杰斯特拉算法]

Java版高级数据结构最短路径(迪杰斯特拉算法)

图(最短路径算法————迪杰斯特拉算法和弗洛伊德算法).RP