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 }

 

 

posted @ 2012-08-15 20:34  时光旅行的懒猫  阅读(226)  评论(0编辑  收藏  举报