基础算法学习---floyd算法

多源路算法(O(n ^ 3))

Floyd求最短路

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 210,null = 0x3f3f3f3f;

int d[N][N];
int n,m;


//遍历更新最短路,排除自环
void floyd(){
    for(int k = 1;k <= n;k ++)
        for(int i = 1;i <= n;i ++)
            for(int j = 1;j <= n;j ++)
                d[i][j] = min(d[i][j],d[i][k] + d[k][j]);
}

int main(){
    int q;
    cin >> n >> m >> q;

//初始化
    for(int i = 1;i <= n;i ++)
        for(int j = 1;j <= n;j ++)
            if(i == j) d[i][j] = 0;
            else d[i][j] = null;

//赋权
    while(m --){
        int a,b,c;
        cin >> a >> b >> c;

        d[a][b] = min(d[a][b],c);
    }

    floyd();

    while(q --){
        int a,b;
        cin >> a >> b;

        if(d[a][b] > null / 2) puts("impossible");
        else cout << d[a][b];
    }
}
posted @ 2021-07-26 15:10  Xuuxxi  阅读(40)  评论(0)    收藏  举报