dijkstra算法步骤 dijkstra算法

生活知识 2023-12-26 07:30:03
导读 大家好,我是小典,我来为大家解答以上问题。dijkstra算法步骤,dijkstra算法,很多人还不知道,现在让我们一起来看看吧!1、这是我自己写...
2023-12-26 07:30:03

大家好,我是小典,我来为大家解答以上问题。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、}

本文到此讲解完毕了,希望对大家有帮助。

免责声明:本文由用户上传,如有侵权请联系删除!