最基本的最短路问题
由于数据范围1<=n<=100
用n立方的floyed算法即可实现
以下为实现代码
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int map[105][105];
int m,n;
int main()
{
while (scanf("%d%d",&n,&m)!=EOF)//输入
{
if (n==0&&m==0)
{
return 0;
}
memset(map,0x3f,sizeof(map));//将未连接的两个路口之间的距离最大化
//防止取到未连接的两个路口
for (int i=1;i<=m;i++)
{
int a;int b,c;
scanf("%d%d%d",&a,&b,&c);
map[a][b]=c;
map[b][a]=c;//正反
}
for (int k=1;k<=n;k++)
{
for (int j=1;j<=n;j++)
{
for (int i=1;i<=n;i++)
{
if (map[k][i]+map[k][j]<map[i][j])
{
map[i][j]=map[i][k]+map[k][j]; //floyed算法
}
}
}
}
printf("%d\n",map[1][n]);
}
return 0;
}这道题提交时如果没有换行还会导致格式错误
哭哭
583

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



