http://poj.org/problem?id=2387
最短路的简单问题 套模板 运用Dijkstra算法即可 不过要注意重边问题 即 两点之间可能会有多条直接连通的路 因为我们求最短路 所以只把这多条路中最短的一条记录下来即可
AC代码:
#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;
}