最短路径三大算法——1,弗洛伊德算法floyd(复杂度O(n^3))
目前已经更新:
1,弗洛伊德算法floyd(复杂度O(n^3))
2,迪杰斯特拉算法dijkstra (复杂度O(最坏n^2))
3,SPFA算法(复杂度O(n*m))
当然,最短路径有通用的bfs,dfs大神,但是我们这里特别介绍floyd,dijkstra还有spfa,本系列分为三篇
目录
Floyd可以精简的概况为起点,中点与终点,很容易联系到arr[i][k]到arr[k][j],i为起点,k为中间点,j为终点,所以显然他时间复杂度自然是高贵的O(n^3)(大数据会被卡TLE)
HDU一道例题
AC代码
Floyd可以精简的概况为起点,中点与终点,很容易联系到arr[i][k]到arr[k][j],i为起点,k为中间点,j为终点,所以显然他时间复杂度自然是高贵的O(n^3)(大数据会被卡TLE)
HDU一道例题
AC代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <bits/stdc++.h>
using namespace std;
#define ll long longconst int N = 210;
const int INF = 0x3f3f3f3f;
int arr[N][N];int main() {int n, m;while (cin >> n >> m) {memset(arr, 0x3f, sizeof(arr));//memset处理4字节,0x3f就等价于0x3f3f3f3f,赋值极大,是保证后面转移一定能够取到那些小的int a, b, x;for (int i = 1; i <= m; ++i) {cin >> a >> b >> x;if(arr[a][b]>x) //注意,俩城市可以不止一条路,所以我要判断,只有新的路程x小于我原来储存的arr[a][b]我才更新arr[a][b] = arr[b][a] = x;//不知道a,b谁大谁小,不过无所谓,同化就好}for (int i = 0; i < n; ++i)arr[i][i] = 0;//自己到自己路程肯定是0int s, t;cin >> s >> t;for (int k = 0; k < n; ++k)//以k为头,因为我们要明确是围绕中间顶点来遍历,而不是起点或者终点,不以中点遍历可能数据不能及时更新,导致WAfor (int i = 0; i < n; ++i)for (int j = 0; j < n; ++j)arr[i][j] = min(arr[i][j], arr[i][k] + arr[k][j]);//是不是跟dp差不多if (arr[s][t] < INF)cout << arr[s][t] << endl;else cout << -1 << endl;}return 0;
}
最短路径三大算法——1,弗洛伊德算法floyd(复杂度O(n^3))相关推荐
- 最短路径之迪杰斯特拉(Dijkstra 算法)弗洛伊德算法(C语言完整代码实现)
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
- Java 图的最短路径问题-迪杰斯特拉算法VS弗洛伊德算法
1.迪杰斯特拉算法VS弗洛伊德算法 迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径: 弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每一 ...
- 【算法】弗洛伊德(Floyd)算法
这个算法主要要弄懂三个循环的顺序关系. 弗洛伊德(Floyd)算法过程: 1.用D[v][w]记录每一对顶点的最短距离. 2.依次扫描每一个点,并以其为基点再遍历所有每一对顶点D[][]的值,看看是否 ...
- 【算法】弗洛伊德算法 最短路径算法
文章目录 1.概述 2.图解 2.1 图示 2.2 弗洛伊德算法的步骤: 3.代码 1.概述 弗洛伊德(Floyd)算法介绍 和Dijkstra算法一 样,弗洛伊德(Floyd)算法也是一种用 于寻找 ...
- 算法系列——弗洛伊德算法(Floyd)
本系列旨在用简单的人话讲解算法,尽可能避免晦涩的定义,读者可以短时间内理解算法原理及应用细节.我在努力! 本篇文章编程语言为Python,供参考. 弗洛伊德算法(Floyd) 典型最短路径算法.用于计 ...
- 图的最短路径之迪杰斯特拉算法和弗洛伊德算法
文章目录 一.迪杰斯特拉(Dijkstra)算法 1.定义描述 2.算法思想 3.算法步骤 4.算法图解 二.弗洛伊德(Floyd)算法 1.定义描述 2.算法思想 3.算法步骤 三.Dijkstra ...
- 最短路径的两种算法(迪杰斯特拉算法和弗洛伊德算法)
一.迪杰斯特拉(Dijkstra)算法 1.定义描述 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩 ...
- 算法之弗洛伊德(Floyd)算法
简介: Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学 ...
- 弗洛伊德算法_弗洛伊德算法
前面Dijkstra算法和Bellman-Ford算法解决了单源最短路径问题,但是如果需要获取图中任意两顶点的最短距离呢?我们可以使用前面两个算法我们可以遍历每个顶点得到每个顶点的单源最短距离,但是最 ...
- 【数据结构】图的应用(普利姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、拓扑排序)
最小生成树 什么是最小生成树 是一棵树 - 无回路 - |V|个顶点一定有|V|-1条边 是生成树 - 包含全部顶点 - |V|-1条边全在图里 贪心算法 什么是"贪":每一步都要 ...
最新文章
- springboot-springSecurity 之 http Basic认证 (四)
- avcodec_decode_video2()解码视频后丢帧的问题解决
- php mysql 索引_MySQL索引
- SpringBoot之AOP之基本使用
- bzoj 1632: [Usaco2007 Feb]Lilypad Pond(BFS)
- 佰维存储通过注册:拟募资8亿 国家集成电路基金是二股东
- 处理数字音乐文件用计算机软件,处理数字音乐文件用计算机软件商标
- mysql rds数据库优势_云数据库 RDS MySQL究竟有何优势呢?
- 金山云2018年Q4财报里的“去小米化”
- KioptrixVM3-writeup
- 探索一下进制转换 (Python 实现源码)
- 【计算机网络】第二部分 物理层和介质(3) 数据和信号
- 工作笔记-----mingw libgcc_s_sjlj-1.dll is missing
- 不止会下棋,人工智能还能高考阅卷
- appium java 虫师_如何在Appium中使用AI定位
- 修复openssl漏洞,升级openssl
- 统计建模与R软件 第五章课后习题(5.13~5.18)
- 介绍一款很好用,超级棒的去中心化雷达 app
- 基于Python的指数基金量化投资——A股全市场成交量计算
- 【PCL】Win10+VS2015+PCL_1.8.0配置
热门文章
- 文献:利用自驱动分子马达并行计算子集和问题 Parallel computation with molecular-motor-propelled agents...(PNAS)
- 海洋cms单本小说网站模板
- Mysql主从延时-Multi-threaded slave statistics for channel
- 使用antV-G6在angualr中画树形关系图
- 团建游戏----气球大赛
- 计算机网络基础知识应用题,【推荐】计算机网络技术与应用题库答案.docx
- 修改android预览分辨率,wm命令使用方法(修改android 分辨率)修改
- 如何取消RAR压缩包的自动加密?
- 恢复误删的 TiDB 集群
- Linux关闭/禁用触摸屏,deepin关闭/禁用触摸屏方法