dijkstra算法步骤 dijkstra算法
大家好,我是小典,我来为大家解答以上问题。dijkstra算法步骤,dijkstra算法,很多人还不知道,现在让我们一起来看看吧!
1、这是我自己写的一个简单的DIJKSTRA算法,其中测试数据是
2、6 8
3、0 2 10
4、0 4 30
5、0 5 100
6、1 2 5
7、2 3 50
8、3 5 10
9、4 3 20
10、4 5 60
11、结构清晰简单,对于你要搞懂这个算法很有帮助。有不懂的可以问我:我的QQ是396730783
12、#include"stdio.h"
13、#define MAX 100000000
14、int main()
15、{
16、 int map[101][101];
17、 int dis[101];
18、 int a,b,c;
19、 int i,j,k,n,m;
20、 int min;
21、 while(scanf("%d",&n)==1)
22、 {
23、 int final[101] = {0};
24、 scanf("%d",&m);
25、 for(i=0;i<n;i++)
26、 for(j=i;j<n;j++)
27、 {
28、 map[i][j] = map[j][i] = MAX;
29、 }
30、 for(i=0;i<m;i++)
31、 {
32、 scanf("%d%d%d",&a,&b,&c);
33、 map[a][b] = c;
34、 }
35、 for(i=1;i<n;i++)
36、 {
37、 dis[i] = map[0][i];
38、 }
39、 dis[0] = 0;
40、 final[0] = 1;
41、 for(i=0;i<n-1;i++)
42、 {
43、 min = MAX;
44、 for(j=1;j<n;j++)
45、 {
46、 if(!final[j] && min > dis[j])
47、 {
48、 min = dis[j];
49、 k = j;
50、 }
51、 }
52、 final[k]=1;
53、 for(j=1;j<n;j++)
54、 {
55、 if(!final[j] && dis[k]+map[k][j]<dis[j])
56、 dis[j] = dis[k]+map[k][j];
57、 }
58、 }
59、 for(i=1;i<n;i++)
60、 {
61、 if(dis[i] == MAX)
62、 printf("不可通");
63、 else
64、 printf("%5d",dis[i]);
65、 }
66、 printf(" ");
67、 }
68、 return 0;
69、}
本文到此讲解完毕了,希望对大家有帮助。