http://poj.org/problem?id=2387
水水的单源最短路,题目大意呢就是、、谷歌翻译会帮你解决的,反正就是一个回家的问题,要注意有重边就行,取最小边权,记得第一次遇到重边时,WA到死啊、、、、、不多说,直接附上代码
#include<stdio.h>
#include<string.h>
int d[2200][2200];
int f[2200];
int k[2200];
const int inf=1000000;
int min(int a, int b)
{
return a>b?b:a;
}
int main()
{
int T,N;
scanf("%d%d",&T,&N);
int i,j;
memset(d,0,sizeof(d));
memset(k,0,sizeof(k));
for(i=1;i<=T;i++)
{
int a,b,t;
scanf("%d%d",&a,&b);
scanf("%d",&t);
if(d[a][b]==0)
d[a][b]=t;
else
d[a][b]=min(d[a][b],t);
d[b][a]=d[a][b];
}
for(i=1;i<N;i++)
f[i]=inf;
f[N]=0;
for(i=1;i<=N;i++)
{
int judge=-1;
for(j=1;j<=N;j++)
{
if(k[j]==0)
{
if(judge==-1||f[judge]>f[j])
judge=j;
}
}
k[judge]=1;
for(j=1;j<=N;j++)
{
if(d[judge][j]>0&&f[j]>f[judge]+d[judge][j]&&k[j]==0)
f[j]=f[judge]+d[judge][j];
}
}
printf("%d\n",f[1]);
}