搜索与图论——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;
}
相关推荐
奇树谦8 分钟前
VTK|显示三维图像的二维切片
c++·vtk·qt5·三维显示
闭月之泪舞11 分钟前
初识函数------了解函数的定义、函数的参数、函数的返回值、说明文档的书写、函数的嵌套使用、变量的作用域(全局变量与局部变量)
python·算法·机器学习
老歌老听老掉牙24 分钟前
Open CASCADE学习|几何体切片处理:OpenMP与OSD_Parallel并行方案深度解析
c++·学习·open cascade·切片处理
GUIQU.32 分钟前
【每日一题丨2025年5.12~5.18】排序相关题
算法·排序·每日一题
哪 吒44 分钟前
2025B卷 - 华为OD机试七日集训第2期 - 按算法分类,由易到难,循序渐进,玩转OD(Python/JS/C/C++)
python·算法·华为od·华为od机试·2025b卷
孤寂大仙v44 分钟前
【Linux笔记】——Linux线程封装
linux·笔记·算法
superior tigre1 小时前
C++学习:六个月从基础到就业——C++20:范围(Ranges)基础
c++·学习·c++20
欧先生^_^2 小时前
Rust 编程语言的官方源码仓库
开发语言·算法·rust
程序员爱钓鱼2 小时前
可变参数(Variadic Functions)- 《Go语言实战指南》
算法
鸡鸭扣2 小时前
leetcode hot100:解题思路大全
数据结构·python·算法·leetcode·力扣