图结构练习——最短路径(Floyd)(HUD1874)

http://acm.hdu.edu.cn/showproblem.php?pid=1874

 

 1 #include<stdio.h>

 2 #include<string.h>

 3 const int oo=1<<28;

 4 const int maxn=1001;

 5 

 6 int map[maxn][maxn];

 7 int m,n;

 8 

 9 void floyd()

10 {

11     for(int k=0;k<n;k++)

12     for(int i=0;i<n;i++)

13     for(int j=0;j<n;j++)

14     {

15         if(map[i][k]+map[k][j]<map[i][j])

16         map[i][j]=map[i][k]+map[k][j];

17     }

18 }

19 

20 void init()

21 {

22     for(int i=0;i<n;i++)

23     {

24         for(int j=0;j<n;j++)

25         {

26             map[i][j]=oo;

27         }

28         map[i][i]=0;

29     }

30 }

31 

32 int main()

33 {

34     while(scanf("%d %d",&n,&m)!=EOF)

35     {

36         init();

37         int u,v,w;

38         for(int i=0;i<m;i++)

39         {

40             scanf("%d %d %d",&u,&v,&w);

41             if(map[u][v]>w)

42             {

43                 map[u][v]=w;

44                 map[v][u]=w;

45             }

46         }

47         floyd();

48         scanf("%d %d",&u,&v);

49         int ves=map[u][v];

50         if(ves<oo)

51         printf("%d\n",map[u][v]);

52         else

53         printf("-1\n");

54     }

55     return 0;

56 }
View Code

 

你可能感兴趣的:(floyd)