hdu 2544

 1  //hdu 2544 最短路 floyd
 2 #include<stdio.h>
 3 int main()
 4 {
 5   int e[201][201];
 6   int inf=99999999;
 7   int n,m;
 8   int i,j,k;
 9   int t1,t2,t3;
10   while(scanf("%d %d",&n,&m),n,m)
11   {
12     for(i=1;i<=n;i++) 
13       for(j=1;j<=n;j++) 
14         if(i==j) e[i][j]=0; 
15         else e[i][j]=inf; 
16 
17     for(i=1;i<=m;i++) 
18     { 
19       scanf("%d %d %d",&t1,&t2,&t3);
20 
21       if(e[t1][t2]>t3) 
22       e[t2][t1]=e[t1][t2]=t3;//此步甚好 
23     } 
24 
25     for(k=1;k<=n;k++) 
26       for(i=1;i<=n;i++) 
27         for(j=1;j<=n;j++) 
28         if(e[i][j]>e[i][k]+e[k][j] )
29         e[i][j]=e[i][k]+e[k][j];
30 
31     printf("%d\n",e[1][n]<e[n][1] ? e[1][n]:e[n][1]);    
32 
33   }
34   return 0;
35 } 
36 
37 
38  //hdu 2544 Dijkstra 
39 #include<stdio.h>
40 #include<iostream>
41 #include<string.h>
42 using namespace std;
43 int main()
44 {
45   int n,m,t1,t2,t3,e[201][201],book[201],dis[201],i,j,k,min,u,v;
46   int inf=99999999;
47   while(scanf("%d %d",&n,&m),n,m)
48   {
49     for(i=1;i<=n;i++)
50       for(j=1;j<=n;j++)
51       if(i == j) e[i][j]=0;
52       else e[i][j]=inf;
53 
54     for(i=1;i<=m;i++)
55     {
56       cin>>t1>>t2>>t3;
57       if(e[t1][t2]>t3)
58       e[t1][t2]=e[t2][t1]=t3;
59     }
60 
61     for(i=1;i<=n;i++)
62     dis[i]=e[1][i];
63 
64     memset(book,0,sizeof(book));//这个初始化必须做好,不然wa还不易发现 
65     book[1]=1;
66 
67     for(i=1;i<=n-1;i++)
68     {
69       min=inf;
70       for(j=1;j<=n;j++)
71       {
72         if(book[j] == 0&&dis[j] < min)
73         {
74           min=dis[j];
75           u=j;
76         }
77       }
78 
79       book[u]=1;
80       for(v=1;v<=n;v++)
81       {
82         if(e[u][v]<inf)
83         {
84           if(dis[v]>dis[u]+e[u][v])
85           dis[v]=dis[u]+e[u][v];
86         }
87       }
88     }
89     cout<<dis[n]<<endl;    
90   }
91   return 0;
92 } 

 

posted @ 2015-08-04 10:44  澧浦  阅读(315)  评论(0)    收藏  举报