您的位置:首页 > 其它

hdu 1874 畅通工程续(最短路floyd)

2014-03-24 12:06 411 查看
题意是给两城市间的几条路,最后求城市star到城市end的最短路的距离,若到不了输出-1。

刚开始接触最短路。

因为求的是任意两点间的最短路,所以选择floyd求最短路。

易出错的地方是城市 i 到 j 不一定只有一条路,所以要加入一个判断。

代码:

#include<stdio.h>
#include<algorithm>
using namespace std;
const int INF=1 << 29;   //inf要足够大
const int MaxN=201;

int N,M,g[MaxN][MaxN];

void floyd()
{
for(int k=0; k<N; ++k)
for(int i=0; i<N; ++i)
for(int j=0; j<N; ++j)
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
}

int main()
{
int i,j,tmp;
int star,end;
while(scanf("%d%d",&N,&M)!=EOF)
{
for(int i=0; i<MaxN; i++)
for(int j=0; j<MaxN; j++)
g[i][j]=INF;
for(int i=0; i<MaxN; i++)
g[i][i]=0;

for(int k=1; k<=M; k++)
{
scanf("%d%d%d",&i,&j,&tmp);
if(tmp<g[i][j])     //debug 开始的时候没判断。WA,错误原因在于有可能城市 0到1 有好多条路,取最短的那条。
{
g[i][j]=tmp;
g[j][i]=tmp;
}

}

scanf("%d%d",&star,&end);

floyd();

if(g[star][end]<INF)
printf("%d\n",g[star][end]);
else
printf("-1\n");

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: