搜索与图论——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;
}
相关推荐
JJJJ_iii22 分钟前
【机器学习10】项目生命周期、偏斜类别评估、决策树
人工智能·python·深度学习·算法·决策树·机器学习
rgb2gray22 分钟前
共享自行车与电动共享自行车使用中建成环境影响的对比研究:基于合肥数据的时空机器学习分析
人工智能·机器学习·图论·xgboost·shap·gtwr·时空机器学习
子枫秋月25 分钟前
单链表实现全解析
c语言·数据结构·c++
fie888928 分钟前
基于MATLAB的LBFGS优化算法实现
算法·matlab
天选之女wow28 分钟前
【代码随想录算法训练营——Day50(Day49周日休息)】图论——98.所有可达路径
算法·图论
刀法自然30 分钟前
栈实现表达式求值
数据结构·算法·图论
满天星83035771 小时前
【C++】右值引用和移动语义
开发语言·c++·redis·visual studio
我搞slam1 小时前
有效的括号--leetcode
linux·算法·leetcode
蜕变的土豆1 小时前
三、cmake语法-提高篇
c++·软件构建
Yupureki2 小时前
从零开始的C++学习生活 19:C++复习课(5.4w字全解析)
c语言·数据结构·c++·学习·1024程序员节