HDOJ 2544 最短路 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2544
【code】(dijkstra):
1 #include <iostream>
2 #include <cstring>
3 #include <cstdio>
4 using namespace std;
5 #define maxn 1001
6 int map[maxn][maxn];
7 int dijkstra(int from,int to,int n)
8 {
9 int dij[maxn],i,k;
10 bool used[maxn];
11 memset(used,false,sizeof(used));
12 for(i=1;i<=n;i++)
13 dij[i]=INT_MAX;
14 dij[from]=0;
15 used[from]=true;
16 int now=from;
17 for(i=1;i<n;i++)
18 {
19 for(k=1;k<=n;k++)
20 if(map[now][k]&&dij[k]>dij[now]+map[now][k])
21 dij[k]=dij[now]+map[now][k];
22 int min=INT_MAX;
23 for(k=1;k<=n;k++)
24 if(!used[k]&&dij[k]<min)
25 min=dij[now=k];
26 used[now]=true;
27 }
28 return dij[to];
29 }
30 int main()
31 {
32 int n,m,a,b,c,i,l;
33 while(~scanf("%d%d",&n,&m))
34 {
35 if(n==0&&m==0)
36 break;
37 memset(map,0,sizeof(map));
38 for(i=0;i<m;i++)
39 {
40 scanf("%d%d%d",&a,&b,&c);
41 if(c<map[a][b]&&map[a][b]||!map[a][b])
42 {
43 map[a][b]=c;
44 map[b][a]=c;
45 }
46 }
47 l=dijkstra(1,n,n);
48 printf("%d\n",l);
49 }
50 return 0;
51 }
2 #include <cstring>
3 #include <cstdio>
4 using namespace std;
5 #define maxn 1001
6 int map[maxn][maxn];
7 int dijkstra(int from,int to,int n)
8 {
9 int dij[maxn],i,k;
10 bool used[maxn];
11 memset(used,false,sizeof(used));
12 for(i=1;i<=n;i++)
13 dij[i]=INT_MAX;
14 dij[from]=0;
15 used[from]=true;
16 int now=from;
17 for(i=1;i<n;i++)
18 {
19 for(k=1;k<=n;k++)
20 if(map[now][k]&&dij[k]>dij[now]+map[now][k])
21 dij[k]=dij[now]+map[now][k];
22 int min=INT_MAX;
23 for(k=1;k<=n;k++)
24 if(!used[k]&&dij[k]<min)
25 min=dij[now=k];
26 used[now]=true;
27 }
28 return dij[to];
29 }
30 int main()
31 {
32 int n,m,a,b,c,i,l;
33 while(~scanf("%d%d",&n,&m))
34 {
35 if(n==0&&m==0)
36 break;
37 memset(map,0,sizeof(map));
38 for(i=0;i<m;i++)
39 {
40 scanf("%d%d%d",&a,&b,&c);
41 if(c<map[a][b]&&map[a][b]||!map[a][b])
42 {
43 map[a][b]=c;
44 map[b][a]=c;
45 }
46 }
47 l=dijkstra(1,n,n);
48 printf("%d\n",l);
49 }
50 return 0;
51 }
【code】(floyd):
1 #include <iostream>
2 #include <cstring>
3 #include <cstdio>
4 using namespace std;
5 #define maxn 1001
6 int map[maxn][maxn];
7 int main()
8 {
9 int n,m,a,b,c,i,j,k;
10 while(~scanf("%d%d",&n,&m))
11 {
12 if(n==0&&m==0)
13 break;
14 for(i=1;i<=n;i++)
15 for(j=1;j<=n;j++)
16 map[i][j]=9999999;
17 for(i=0;i<m;i++)
18 {
19 scanf("%d%d%d",&a,&b,&c);
20 if(c<map[a][b])
21 {
22 map[a][b]=c;
23 map[b][a]=c;
24 }
25 }
26 for(k=1;k<=n;k++)
27 for(i=1;i<=n;i++)
28 for(j=1;j<=n;j++)
29 if(map[i][k]+map[k][j]<map[i][j])
30 map[i][j]=map[i][k]+map[k][j];
31 printf("%d\n",map[1][n]);
32 }
33 return 0;
34 }
2 #include <cstring>
3 #include <cstdio>
4 using namespace std;
5 #define maxn 1001
6 int map[maxn][maxn];
7 int main()
8 {
9 int n,m,a,b,c,i,j,k;
10 while(~scanf("%d%d",&n,&m))
11 {
12 if(n==0&&m==0)
13 break;
14 for(i=1;i<=n;i++)
15 for(j=1;j<=n;j++)
16 map[i][j]=9999999;
17 for(i=0;i<m;i++)
18 {
19 scanf("%d%d%d",&a,&b,&c);
20 if(c<map[a][b])
21 {
22 map[a][b]=c;
23 map[b][a]=c;
24 }
25 }
26 for(k=1;k<=n;k++)
27 for(i=1;i<=n;i++)
28 for(j=1;j<=n;j++)
29 if(map[i][k]+map[k][j]<map[i][j])
30 map[i][j]=map[i][k]+map[k][j];
31 printf("%d\n",map[1][n]);
32 }
33 return 0;
34 }