搜索与图论——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;
}
相关推荐
StrokeAce1 小时前
linux桌面软件(wps)内嵌到主窗口后的关闭问题
linux·c++·qt·wps·窗口内嵌
hsling松子4 小时前
使用PaddleHub智能生成,献上浓情国庆福
人工智能·算法·机器学习·语言模型·paddlepaddle
家有狸花5 小时前
VSCODE驯服日记(三):配置C++环境
c++·ide·vscode
dengqingrui1235 小时前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
C++忠实粉丝5 小时前
前缀和(8)_矩阵区域和
数据结构·c++·线性代数·算法·矩阵
ZZZ_O^O6 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
CV-King6 小时前
opencv实战项目(三十):使用傅里叶变换进行图像边缘检测
人工智能·opencv·算法·计算机视觉
代码雕刻家6 小时前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
雨中rain6 小时前
算法 | 位运算(哈希思想)
算法
小飞猪Jay8 小时前
C++面试速通宝典——13
jvm·c++·面试