搜索与图论——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;
}
相关推荐
R-G-B几秒前
BM28 二叉树的最大深度
数据结构·算法·二叉树·bm28·二叉树的最大深度
用户0203388613149 分钟前
红黑树主要功能实现
算法
꧁Q༒ོγ꧂10 分钟前
C++ 入门完全指南(六)--指针与动态内存
开发语言·c++
永远不打烊10 分钟前
c++ 11 之 并发与多线程
c++
专注VB编程开发20年13 分钟前
压栈顺序是反向(从右往左)的,但正因为是反向压栈,所以第一个参数反而离栈顶(ESP)最近。
java·开发语言·算法
Xの哲學14 分钟前
Linux Select 工作原理深度剖析: 从设计思想到实现细节
linux·服务器·网络·算法·边缘计算
say_fall18 分钟前
C++ 类与对象易错点:初始化列表顺序 / 静态成员访问 / 隐式类型转换
android·java·开发语言·c++
Paul_092033 分钟前
golang编程题
开发语言·算法·golang
颜酱37 分钟前
用填充表格法-继续吃透完全背包及其变形
前端·后端·算法
夏秃然40 分钟前
打破预测与决策的孤岛:如何构建“能源垂类大模型”?
算法·ai·大模型