为什么转移点的循环要放在最外层
查看原帖
为什么转移点的循环要放在最外层
753009
I_am_sb___楼主2023/3/12 21:59

代码第10到17行

为什么floyd的转移点的循环要放在最外层呢
#include<bits/stdc++.h>

using namespace std;

const int N = 207;

int n , m , k;
int dis[N][N];

void Floyd(){
    for(int k = 1 ; k <= n ; k ++)
        for(int i = 1 ; i <= n ; i++)
            for(int j = 1 ; j <= n ; j++)
            {
                dis[i][j] = min(dis[i][j] , dis[i][k] + dis[k][j]);
            }
}

int main(){
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin >> n >> m >> k;
    for(int i = 1 ; i <= n ; i++)
        for(int j = 1 ; j <= n ; j++)
        {
            if(i == j)
            {
                dis[i][j] = 0;
            }
            else
            {
            dis[i][j] = 0x3f3f3f3f;
            }
        }
    int a , b , c;
    for(int i = 1 ; i <= m ; i++)
    {
        cin >> a >> b >> c;
        dis[a][b] = min(dis[a][b] , c);
    }
    Floyd();
    for(int i = 1 ; i <= k ; i++)
    {
        cin >> a >> b;
        if(dis[a][b] > 0x3f3f3f3f / 2)
        {
            cout << "impossible" << endl;
        }
        else
        {
            cout << dis[a][b] << endl;
        }
    }
    return 0;
}
2023/3/12 21:59
加载中...