HDU 1874 畅通工程续

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1874

最短路Dijkstra模板题

View Code
 1 #include<stdio.h>

 2 #include<string.h>

 3 #define N 1000000

 4 int map[250][250],visit[250],lowcost[250];

 5 void dis(int n,int s,int t)

 6 {

 7     int i,j,k,min;

 8     for(i=0;i<n;i++)

 9     {

10         visit[i]=0;

11         lowcost[i]=map[s][i];

12     }

13     visit[s]=1;

14     for(i=1;i<n;i++)

15     {

16         min=N;k=-1;

17         for(j=0;j<n;j++)

18         {

19             if(visit[j]==0&&min>lowcost[j])

20             {

21                 min=lowcost[j];

22                 k=j;

23             }

24         }

25         if(k==-1)

26         break;

27         if(k==t)

28         break;

29         visit[k]=1;

30         for(j=0;j<n;j++)

31         {

32             if(visit[j]==0&&lowcost[j]>map[k][j]+lowcost[k])

33             lowcost[j]=map[k][j]+lowcost[k];

34         }

35     }

36     if(lowcost[t]==N)

37     printf("-1\n");

38     else

39     printf("%d\n",lowcost[t]);

40 }

41 int main()

42 {

43     int n,m,i,j,a,b,x,s,t;

44     while(~scanf("%d%d",&n,&m))

45     {

46         for(i=0;i<n;i++)

47         for(j=0;j<n;j++)

48         map[i][j]=N;

49         for(i=0;i<n;i++)

50         {

51             map[i][i]=0;

52         }

53         for(i=0;i<m;i++)

54         {

55             scanf("%d%d%d",&a,&b,&x);

56             if(x<map[a][b])

57             {

58                 map[a][b]=map[b][a]=x;

59             }

60         }

61         scanf("%d%d",&s,&t);

62         if(t==s)

63         {

64             printf("0\n");

65             continue;

66         }

67         dis(n,s,t);

68     }

69     return 0;

70 }

 

 

你可能感兴趣的:(HDU)