代码改变世界

暑假集训(3)第三弹 -----Til the Cows Come Home(Poj2387)

2016-07-27 20:52  HUAS_周林微  阅读(135)  评论(0编辑  收藏  举报

题意梗概:据说母牛在产奶的时候,因为奶量太充足,希望有人帮它挤奶,它回家就很快。我们便能喝到鲜美的

牛奶,不过,贫奶季节却大不相同,它会懒洋洋的在大草原上晃来晃去的晒太阳,而不会想到马上回家,这可不

是好兆头,这意味着它没时间睡好觉,随之产奶的质量又会下降。

为了喝到高质量的鲜牛奶,以促进身体发育,长得更高,你希望它能尽快的回家睡觉,所以你要在给定的几条小

路中找到能回家最短的路径组合。

 

题目分析:还是求最短路径,可以用dijkstra算法解题,这方法我也不是特别懂,照着书上打完,再改了一下,就

过了......

 

 1 #include "cstdio"
 2 #define INF 1000100
 3 int v[1004];
 4 int d[1004][1004];
 5 int l[1004];
 6 int min(int x,int y)
 7 {
 8     return x>y?y:x;
 9 }
10 void abegin(int n)
11 {
12     for (int i=0;i<n;i++)
13      {
14         v[i] = 0;
15         l[i]= (i == n-1?0:INF);
16         for (int j=0;j<n;j++)
17           d[i][j] =INF;
18      }
19 }
20 int main()
21 {
22     int t,n;
23     int a,b,c,x;
24     while (scanf ("%d%d",&t,&n)!= EOF)
25     {
26         abegin(n);
27         while (t--)
28         {
29             scanf ("%d%d%d",&a,&b,&c);
30             if (c < d[a-1][b-1])
31                {
32                    d[a-1][b-1] = c;
33                    d[b-1][a-1] = c;
34                }
35         }
36        for (int k=0;k<n;k++)
37        {
38          c = INF;
39          for (int i=0;i<n;i++)
40          {
41             if (!v[i] && l[i]<=c)
42                  c = l[x=i];
43          }
44          v[x] = 1;
45          for (int i=0;i<n;i++)
46          {
47             l[i] = min (l[i],l[x]+d[i][x]);
48          }
49        }
50        printf ("%d\n",l[0]);
51     }
52 
53 
54     return 0;
55 }
View Code