POJ 2387 Til the Cows Come Home(Dijkstra算法)
http://poj.org/PRoblem?id=2387
最短路的简单问题 套模板 运用Dijkstra算法即可 不过要注意重边问题 即 两点之间可能会有多条直接连通的路 因为我们求最短路 所以只把这多条路中最短的一条记录下来即可
代码如下:
#include <stdio.h> int map[2010][2010]; int dis[2010]; int maxinf=999999999; void Dijkstra(int n){ int vis[2010]; for (int i=1;i<=n;i++) { dis[i]=map[1][i]; vis[i]=0; } vis[1]=1; dis[1]=0; int u; for (int i=1;i<=n;i++){ int mindis=maxinf; for (int j=1;j<=n;j++){ if (!vis[j]&&dis[j]<mindis){ u=j; mindis=dis[j]; } } vis[u]=1; for (int j=1;j<=n;j++){ if (!vis[j]&&dis[u]+map[u][j]<dis[j]){ dis[j]=dis[u]+map[u][j]; } } } } int main (){ int N,M; int A,B,C; scanf ("%d%d",&N,&M); for (int i=1;i<=M;i++){ for (int j=1;j<=M;j++){ map[i][j]=maxinf; } } for (int i=1;i<=N;i++){ scanf ("%d%d%d",&A,&B,&C); if (map[A][B]>C)//注意重边 { map[A][B]=C; map[B][A]=C; } } Dijkstra(M); printf ("%d\n",dis[M]); return 0; }