搜索与图论——Floyd算法求最短路

floyd算法用来求多源汇最短路

用邻接矩阵来存所有的边

时间复杂度O(n^3)

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

const int N = 20010,INF = 1e9;

int n,m,k;
int g[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 ++ ){
                g[i][j] = min(g[i][j],g[i][k] + g[k][j]);
            }
        }
    }
}

int main(){
    cin >> n >> m >> k;
    for(int i = 1;i <= n;i ++ ){
        for(int j = 1;j <= m;j ++ ){
            if(i == j) g[i][j] = 0;
            else g[i][j] = INF;
        }
    }
    for(int i = 0;i < m;i ++ ){
        int x,y,z;
        cin >> x >> y >> z;
        g[x][y] = min(g[x][y],z);
    }
    floyd();
    while(k -- ){
        int x,y;
        cin >> x >> y;
        if(g[x][y] > INF / 2) cout << "impossible" << endl; //INF还是要/2,考虑到可能有负权边的情况
        else cout << g[x][y] <<endl;
    }
    return 0;
}
相关推荐
A boy CDEF girl1 分钟前
算法题专栏:优选算法
数据结构·算法·leetcode
没落之王8 分钟前
三易五行看宋朝的三界确立
大数据·人工智能·算法
wuminyu30 分钟前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
qq_4069810337 分钟前
c++的decltype是什么
开发语言·c++
坤坤子吖42 分钟前
算法学习——单调队列
开发语言·c++·笔记·学习·算法
杜 硕1 小时前
从零开始的C++生活——第六讲——01
开发语言·c++·生活
Js.Tx2 小时前
【具体数学 Concrete Mathematics】2.1.5 一般性的方法
算法·具体数学
Risehuxyc3 小时前
C++(VS2026)使用Ncap库的配置
c++
秋天的怀念_David4 小时前
算法一千零一夜 · 作品相关:版权与致谢声明
程序人生·算法·学习方法
4ever.ov04 小时前
精学C++第一站 从命名空间到引用:C++入门核心语法全梳理(13000字长文)
开发语言·c++·clion