社区讨论
求助50分floyd最短路
P2009跑步参与者 8已保存回复 14
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 14 条
- 当前快照
- 1 份
- 快照标识符
- @mi7yedj6
- 此快照首次捕获于
- 2025/11/21 05:38 4 个月前
- 此快照最后确认于
- 2025/11/21 06:43 4 个月前
CPP
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int n, m, f[1001][1001], z;
char x, y, ss, ee;
int main()
{
memset(f, -INF, sizeof(f));
scanf("%d %d", &n, &m);
for(register int i = 1; i <= n; ++i)
{
scanf("%d", &z);
if(i == n)
{
f[n][1] = z;
f[1][n] = z;
}
else
{
f[i][i + 1] = z;
f[i + 1][i] = z;
}
}
for(register int i = 1; i <= m; ++i)
{
cin >> x >> y >> z;
int nx = x - 'A' + 1;
int ny = y - 'A' + 1;
if(nx != ny)
{
f[nx][ny] = max(f[nx][ny], z);
f[ny][nx] = max(f[ny][nx], z);
}
}
cin >> ss >> ee;
int s = ss - 'A' + 1;
int e = ee - 'A' + 1;
for(register int i = 1; i <= n; ++i)
{
for(register int j = 1; j <= n; ++j)
{
if(f[i][j] < 0)
{
f[i][j] = INF;
}
if(i == j)
{
f[i][j] = 0;
}
}
}
for(register int i = 1; i <= n; ++i)
{
for(register int j = 1; j <= n; ++j)
{
for(register int k = 1; k <= n; ++k)
{
if(i != j && i != k && j != k)
{
f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
}
}
}
}
printf("%d", f[s][e]);
return 0;
}
回复
共 14 条回复,欢迎继续交流。
正在加载回复...