试题I:耗时种数 25’
描述
输出
输出一个整数答案
样例
输入复制
4 5
0 1 5
0 2 5
1 3 5
1 0 5
3 2 5
输出复制
2
输入复制
2 0
输出复制
0
提示
数据规模
对于100%的数据,2≤n≤100,数据保证没有自环,可能有重边
思路:典型的弗洛伊德算法 这里应注意的是 题目说了 会有重边 。
#include <stdio.h>
int n,m,dis[101][101],inf,a,b,c,ans[10005],Ans;
int min(int x,int y)
{
return x<y?x:y;
}
int main()
{
inf=1e9;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j)
dis[i][j]=0;
else
dis[i][j]=inf;
}
}
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
dis[a][b]=min(dis[a][b],c);
}
for(int k=0;k<n;k++)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i!=j&&dis[i][j]!=inf&&!ans[dis[i][j]])
{
ans[dis[i][j]]=1;
Ans++;
}
}
}
printf("%d",Ans);
return 0;
}
本文介绍了一种使用弗洛伊德算法解决带重边的最短路径问题的方法,通过给出具体代码实现,展示了如何在给定的图中找到所有顶点之间的最短路径,并统计出所有不同的路径长度。
&spm=1001.2101.3001.5002&articleId=104950790&d=1&t=3&u=8fd10180ef464242bdf158832209b6c9)

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



