需要把所有不存在的边初始化为无穷大,因为它们在Floyd的枚举中会被用到,你这样写等于全部初始化为0,那min()最后就会比出来一堆0
顺便我帮你改了以下MAX_N,按你原来写那么大的话会MLE
```cpp
#include <iostream>
#include <cstring>
#define MAX_N (200 + 10)
using namespace std;
int main() {
int n;
cin >> n;
int rent[MAX_N][MAX_N];
memset(rent, 0x3f, sizeof(rent));
// 输入半矩阵
for (int i = 1; i <= n - 1; ++i) {
for (int j = i + 1; j <= n; ++j) {
cin >> rent[i][j];
}
}
// 弗洛伊德算法
for (int k = 1; k <= n; ++k) {
for (int i = 1; i <= n; ++i) {
for (int j = i + 1; j <= n; ++j) {
rent[i][j] = min(rent[i][j], rent[i][k] + rent[k][j]);
}
}
}
/*
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
cout << rent[i][j] << " ";
if (j == n) cout << endl;
}
}
*/
// 输出结果
cout << rent[1][n] << endl;
return 0;
}
``````
by 杜都督 @ 2024-02-03 03:21:01
@[杜都督](/user/39279) 懂了懂了,谢谢佬?
by Shrimp123 @ 2024-02-03 11:57:55
@[Shrimp123](/user/1275384) 不用谢,顺便更正一下,你这个rent是局部变量,那么像原来那样不初始化的话所有的值就不一定0而是随机值
by 杜都督 @ 2024-02-03 12:18:38
@[杜都督](/user/39279) 那要是定义成全局变量就会全都自动初始化为0吗
by Shrimp123 @ 2024-02-05 16:48:10
@[Shrimp123](/user/1275384) 对
by 杜都督 @ 2024-02-05 18:59:33