搜索与图论——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;
}
相关推荐
小O的算法实验室7 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
码匠许师傅7 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
Tbisnic7 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
Brilliantwxx8 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法
空堂与归9 小时前
用户分群找不到规律?用K-Means聚类算法自动发现数据模式
算法·机器学习·kmeans·聚类
动词ing9 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习9 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
一只小小的芙厨10 小时前
基础数论总结
笔记·学习·算法
夜不会漫长11 小时前
C++入门(1)
开发语言·c++·算法
wen_zhufeng12 小时前
IndexTTS 2.5 技术报告
人工智能·算法·机器学习