题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874
题目大意:中文题目…………
题意分析:最典型的最短路径,非常简单,Dijkstra或者Floyd算法都可以直接解决,这里我用的是Floyd算法。
AC代码:
#include <iostream>
using namespace std;
#define INF 2000000
int main()
{
int n,m;
int a,b,c;
int start,end;
int f[205][205];
while(cin>>n>>m)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
f[i][j] = INF;
if(i==j)f[i][j] = 0;
}
}
for(int i=0;i<m;i++)
{
cin>>a>>b>>c;
if(c<f[a][b])
f[a][b] = f[b][a] = c;
}
cin>>start>>end;
for(int k=0;k<n;k++)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if((f[i][k]+f[k][j])<f[i][j])
f[i][j] = f[j][i] = f[i][k]+f[k][j];
}
}
}
if(f[start][end]==INF)cout<<-1<<endl;
else cout<<f[start][end]<<endl;
/* for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<f[i][j]<<" ";
}
cout<<endl;
}*/
}
return 0;
}
明明是非常简单的一道题,重边也注意到了,还是卡了半个多小时,最后发现是用Floyd算法的时候for循环的顺序错了…………
本文介绍了一道经典的最短路径问题,并使用Floyd算法进行解答。通过具体实例展示了如何初始化距离矩阵并逐步更新以找到任意两点间的最短路径。
281

被折叠的 条评论
为什么被折叠?



