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 }