首页 > 编程语言 >floyd算法

floyd算法

时间:2023-11-27 10:34:14浏览次数:40  
标签:有向图 int floyd Warshall 算法 Floyd

FLOYD

复杂度

Floyd-Warshall算法的时间复杂度为

O(|V|^{3})[4],空间复杂度为

O(|V|^{2}),其中

V是点集。

原理

动态规划

适用范围

Floyd-Warshall 算法适用于解决带权有向图或带权无向图的全源最短路径问题,即计算任意两个顶点之间的最短路径长度。

Floyd-Warshall 算法的适用范围包括:

有向图或无向图:Floyd-Warshall 算法可以应用于有向图或无向图,可以处理带权边的情况。

正权边或负权边:Floyd-Warshall 算法可以处理正权边和负权边的情况。然而,如果图中存在负权环(环上的边权之和为负),则算法无法得到正确结果。

无需指定起点和终点:Floyd-Warshall 算法计算了任意两个顶点之间的最短路径长度,因此无需指定特定的起点和终点。

中心代码

for (int k = 1; k <= n; k++) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                if (g[i][k] != INF && g[k][j] != INF && g[i][k] + g[k][j] < g[i][j])
                    g[i][j] = g[i][k] + g[k][j];
            }
        }
    }
#include <bits/stdc++.h>
using namespace std;

const int INF = 10000000;

void floyd(vector<vector<int>>& g, int n, int m) {
    for (int i = 0; i < m; i++) {
        int a, b, w;
        cin >> a >> b >> w;
        g[a][b] = w;
    }

    for (int k = 1; k <= n; k++) {
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                if (g[i][k] != INF && g[k][j] != INF && g[i][k] + g[k][j] < g[i][j])
                    g[i][j] = g[i][k] + g[k][j];
            }
        }
    }
}

int main() {
    int n, m;
    cin >> n >> m;

    vector<vector<int>> g(n + 1, vector<int>(n + 1, INF));
    floyd(g, n, m);

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if (g[i][j] == INF)
                cout << "NO";
            else
                cout << g[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

标签:有向图,int,floyd,Warshall,算法,Floyd
From: https://www.cnblogs.com/LeeTsFungRichard/p/17858244.html

相关文章

  • KMP算法
    #include<iostream>usingnamespacestd;int*getNext(stringpattern){int*next=(int*)malloc(sizeof(int)*pattern.size());if(next==NULL){returnNULL;}next[0]=-1;intj=-1;for(inti=1;i<p......
  • 排序算法之冒泡排序1
    一概述在生活中,我们离不开排序。例如在学校站队时,会按照身高顺序进行排队。每一个月考或者期末的成绩都会按照成绩排名次。在编程学习中,我们也会经常遇到排序的问题。这种排序的场景非常多。例如在开发一个学生管理系统时,需要按照学号的顺序从小到大去排列。当开发一个电商平台时,需......
  • ISP算法简述-BLC
    BlackLevelCalibration,黑电平矫正现象1)在纯黑条件下拍张图,你会发现像素值不为02)或者你发现图像整体偏色这些问题可能是黑电平导致的。原因存在黑电平的原因有2个:1)sensor的电路本身存在暗电流。暗电流主要产生在光电信号转换过程中,光电二极管受温度,电压稳定性等因素的干......
  • 基于HOG特征提取和GRNN神经网络的人脸表情识别算法matlab仿真,测试使用JAFFE表情数据
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述        该算法主要由两个部分组成:HOG特征提取和GRNN神经网络。下面将详细介绍这两个部分的原理和数学公式。 1.HOG特征提取      HOG(HistogramofOrientedGradients)是......
  • 基于FPGA的图像指数对比度增强算法实现,包括tb测试文件和MATLAB辅助验证
    1.算法运行效果图预览      2.算法运行软件版本Vivado2019.2 matlab2022a 3.算法理论概述3.1图像指数对比度增强概述     图像指数对比度增强是一种常见的图像处理方法,主要是通过改变图像的像素值来增强图像的对比度。具体来说,它通常通过将原始图像......
  • 活动安排 贪心算法
    会议(活动)安排如题:思路:贪心算法假设现在有五组数据1.将活动按照结束时间递增排序2.当前安排的活动的结束时间小于等于下一个活动的开始时间ps:如果两个活动的结束时间相同,选择开始时间较晚的a13,5a21,4a21,4a13,5a30,6a30,6a45,7a45,7a53,8......
  • 文心一言 VS 讯飞星火 VS chatgpt (143)-- 算法导论12.1 3题
    三、用go语言,设计一个执行中序遍历的非递归算法。(提示:一种容易的方法是使用栈作为辅助数据结构;另一种较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否相等。)文心一言,代码正常运行:我们可以使用栈作为辅助数据结构来执行中序遍历的非递归算法。以下是用Go语言实现的代......
  • 文心一言 VS 讯飞星火 VS chatgpt (143)-- 算法导论12.1 3题
    三、用go语言,设计一个执行中序遍历的非递归算法。(提示:一种容易的方法是使用栈作为辅助数据结构;另一种较复杂但比较简洁的做法是不使用栈,但要假设能测试两个指针是否相等。)文心一言,代码正常运行:我们可以使用栈作为辅助数据结构来执行中序遍历的非递归算法。以下是用Go语言实现......
  • 家长直呼太暴力!这些算法可能会被删除
    近日,洛谷网络科技有限公司多位用户家长向@kkksc03反映,部分算法存在血腥、暴力等不利于青少年儿童的因素出现,要求对相关算法进行整改或被删除。洛谷网络科技有限公司题目组管理员在接受采访时说道,在最近几天内,洛谷收到了数十条家长来信,声称网站教授的部分算法存在“血腥”、“暴......
  • 关于人工智能算法的深度思考(总结)
    1、神经元其实并不神奇,神奇的是它以某种相互联系的方式,可以在训练得到答案并核对答案后,立即对所走的路径上的权重进行更新(反向传播),更新的依据是答案误差大小,误差大则更新也大,误差小则更新就小。所走路径:所有单次训练被激活的神经元的组合。2、根据1,我们完全可以重新设计更好的神......