struct Folyd {
ll mp[N][N];//i-j>最短路
ll way[N][N];//i->j有多少条不同的最短路
double ans[N];
int n, m;
void init()
{
memset(mp, 0x3f, sizeof mp);
cin >> n >> m;
while (m--)
{
int a, b, c; cin >> a >> b >> c;
mp[a][b] = c;
mp[b][a] = c;
way[a][b] = 1;
way[b][a] = 1;
}
}
void folyd()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for (int j = 1; j <= n; j++)
{
if (i != j && j != k && i != k)
{
if (mp[i][j] == mp[i][k] + mp[k][j])
{
way[i][j] += way[i][k] * way[k][j];
}
else if (mp[i][j] > mp[i][k] + mp[k][j])
{
way[i][j] = way[i][k] * way[k][j];
mp[i][j] = mp[i][k] + mp[k][j];
}
}
}
}
}folyd;
Folyd
最新推荐文章于 2026-06-21 01:22:40 发布
本文介绍了一个使用Floyd-Warshall算法求解图中两点间最短路径,并计算不同最短路径数量的C++实现。通过迭代更新,算法可以找出所有可能的最短路径组合。核心代码展示了如何初始化邻接矩阵、执行算法并更新路径计数。

953

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



