(为了防止有人掰扯我,这里只放出部分代码) 你见过谁家的dp,一:可以正着枚举k
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (mp[i][k] + mp[k][j] < mp[i][j]) {
mp[i][j] = mp[i][k] + mp[k][j];
}
}
}
}
二:可以倒着枚举k
for (int k = n; k >= 1; k--) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (mp[i][k] + mp[k][j] < mp[i][j]) {
mp[i][j] = mp[i][k] + mp[k][j];
}
}
}
}
三:我甚至可以先枚举奇数的k,在枚举偶数的k
for (int k = 1; k <= n; k += 2) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (mp[i][k] + mp[k][j] < mp[i][j]) {
mp[i][j] = mp[i][k] + mp[k][j];
}
}
}
}
for (int k = 2; k <= n; k += 2) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (mp[i][k] + mp[k][j] < mp[i][j]) {
mp[i][j] = mp[i][k] + mp[k][j];
}
}
}
}