HDOJ 2544 最短路(Dijkstra & Floyd)

刚才又复习了一下dijkstra算法的模板,顺便看了下Floyd算法,所以找了道水题敲了下,HDOJ上的最短路

 1 //Floyd算法
2 #include <iostream>
3 #include <cstdio>
4 #include <cstring>
5 using namespace std;
6
7 #define N 101
8 #define INF 0x3f3f3f3f
9
10 int n,m,adj[N][N];
11
12 void floyd()
13 {
14 for(int i=1;i<=n;i++)
15 for(int j=1;j<=n;j++)
16 for(int k=1;k<=n;k++)
17 {
18 if(adj[i][j] != INF && adj[i][k] != INF)
19 {
20 if(adj[i][j] + adj[i][k] < adj[j][k])
21 adj[k][j] = adj[j][k] = adj[i][j] + adj[i][k];
22 }
23 }
24 }
25
26 int main()
27 {
28 while(scanf("%d %d",&n,&m) != EOF)
29 {
30 if(n == 0 && m == 0)
31 break;
32 memset(adj,INF,sizeof(adj));
33 while(m--)
34 {
35 int a,b,w;
36 scanf("%d %d %d",&a,&b,&w);
37 adj[a][b] = adj[b][a] = w;
38 }
39 floyd();
40 printf("%d\n",adj[1][n]);
41 }
42 return 0;
43 }
 1 //Dijkstra算法
   #include <iostream>
 2 #include <cstdio>
3 #include <cstring>
4 using namespace std;
5
6 #define N 101
7 #define INF 0x3f3f3f3f
8
9 int n,m,adj[N][N],visit[N],lowcost[N];
10
11 void dijkstra()
12 {
13 memset(visit,0,sizeof(visit));
14 visit[1] = 1;
15 int pos = 1;
16 lowcost[1] = 0;
17 for(int i=2;i<=n;i++)
18 lowcost[i] = adj[pos][i];
19 for(int i=1;i<n;i++)
20 {
21 int min = INF;
22 for(int j=1;j<=n;j++)
23 if(!visit[j] && lowcost[j] < min)
24 {
25 pos = j;
26 min = lowcost[j];
27 }
28 if(min == INF)
29 break;
30 visit[pos] = 1;
31 for(int j=1;j<=n;j++)
32 if(adj[pos][j] != INF && !visit[j] && lowcost[pos] + adj[pos][j] < lowcost[j])
33 lowcost[j] = lowcost[pos] + adj[pos][j];
34 }
35 }
36
37 int main()
38 {
39 while(scanf("%d %d",&n,&m) != EOF)
40 {
41 if(n == 0 && m == 0)
42 break;
43 memset(adj,INF,sizeof(adj));
44 while(m--)
45 {
46 int a,b,w;
47 scanf("%d %d %d",&a,&b,&w);
48 adj[a][b] = adj[b][a] = w;
49 }
50 dijkstra();
51 printf("%d\n",lowcost[n]);
52 }
53 return 0;
54 }




posted @ 2012-03-08 18:17  HanTQ  阅读(237)  评论(0编辑  收藏  举报