最短路径——floyd算法代码(c语言)
最短路径问题
昨天自己试了试写一下dijkstra的算法博客
今天来更floyd算法,感觉非常简单果然暴力才是解决一切的王道
一、总体思想
floyd算法就是每一次从邻接矩阵选取一个顶点k,然后再去矩阵中遍历两个顶点i,j,看看是i→j的路径短,还是i→k→j的路径短,就是完全的暴力,算法和代码非常简单
二、代码实现
void Floyd(Graph G)
{
int arr[G.vexnum][G.vexnum];
for(int i = ; i < G.vexnum; i++)
for(int j = ; j < G.vexnum; i++)
arr[i][j] = G.edge[i][j]; for(int k; k < G.vexnum; k++)
for(int i = ; i < G.vexnum; i++)
for(int j = ; j < G.vexnum; j++)
if(arr[i][j] > arr[i][k] + arr[k][j])
arr[i][j] = arr[i][k] + arr[k][j];
}
三、代码解释
其实看上面的代码量和代码就知道这个算法很简单 =_=
传入Floyd算法的参数是Graph G
首先开辟一个二维数组arr[][],并且把图的邻接矩阵G.edge[][]赋值给arr[][],算法的主要思想就是来修改arr[][]值暴力出最短路径
int arr[G.vexnum][G.vexnum];//开辟数组arr[][]接收图G.edge[][]的值
for(int i = ; i < G.vexnum; i++)
for(int j = ; j < G.vexnum; i++)
arr[i][j] = G.edge[i][j];//遍历赋值
然后就是每次选择一个顶点k,再去找两个顶点i,j,对比看看是i→j的路径短,还是i→k→j的路径短
也就是arr[i][j] 和 arr[i][k] + arr[k][j]两个的值谁的比较小,然后修改arr[][]一直到遍历完毕
for(int k; k < G.vexnum; k++)//选取k顶点
for(int i = ; i < G.vexnum; i++)
for(int j = ; j < G.vexnum; j++)//再选取i,j两个顶点
if(arr[i][j] > arr[i][k] + arr[k][j])//判断i→j的路径和i→k→j的路径谁比较短
arr[i][j] = arr[i][k] + arr[k][j];//如果i→k→j的路径更短,则修改数组arr[][]
写完感觉好短。。不过确实没啥写的,就是O(n3)的暴力,而且这个算法能计算含有负权值的图,dijkstra就不行
虽然dijkstra的算法只有O(n2),但是它只有一个顶点到剩下顶点的最短路径,如果还是要计算每个点到每个点的最短路径,其实和Floyd一样,也是O(n3)
最重要的是 ——Floyd算法他好记啊!
最短路径——floyd算法代码(c语言)的更多相关文章
- 单源最短路径Dijkstra算法,多源最短路径Floyd算法
1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...
- 7-8 哈利·波特的考试(25 分)(图的最短路径Floyd算法)
7-8 哈利·波特的考试(25 分) 哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变 ...
- 最短路径——dijkstra算法代码(c语言)
最短路径问题 看了王道的视频,感觉云里雾里的,所以写这个博客来加深理解.(希望能在12点以前写完) 一.总体思想 dijkstra算法的主要思想就是基于贪心,找出从v开始的顶点到各个点的最短路径,做法 ...
- 最短路径Floyd算法【图文详解】
Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被 ...
- 最短路径--Floyd算法
Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被 ...
- 单源最短路径——Floyd算法
正如我们所知道的,Floyd算法用于求最短路径.Floyd算法可以说是Warshall算法的扩展,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3). Floyd算法的基本思想如下:从任意 ...
- 图论之最短路径floyd算法
Floyd算法是图论中经典的多源最短路径算法,即求任意两点之间的最短路径. 它可采用动态规划思想,因为它满足最优子结构性质,即最短路径序列的子序列也是最短路径. 举例说明最优子结构性质,上图中1号到5 ...
- 最短路径—Floyd算法
Floyd算法 所有顶点对之间的最短路径问题是:对于给定的有向网络G=(V,E),要对G中任意两个顶点v,w(v不等于w),找出v到w的最短路径.当然我们可以n次执行DIJKSTRA算法,用FLOYD ...
- 最短路径——Floyd算法(含证明)
通过dij,ford,spfa等算法可以快速的得到单源点的最短路径,如果想要得到图中任意两点之间的最短路径,当然可以选择做n遍的dij或是ford,但还有一个思维量较小的选择,就是floyd算法. 多 ...
随机推荐
- java 多线--静态代理模式
我们使用 java 多线程时,都需要通过线程代理对象来启动线程,常见的写法: new Thread(target).start(); 这在设计模式中叫静态代理模式,静态代理模式组成; 1.公共接口 2 ...
- Unity 游戏框架搭建 2019 (三十六~三十八) partial与public
在上一篇,我们把菜单的顺序从头到尾整理了一遍.在整理菜单顺序的过程中,记录了一个要做的事情. 要做的事情: (完成) 备份:导出文件,并取一个合理的名字. 整理完菜单顺序后,学习新的知识,解决随着示例 ...
- ip的运用
1------获取ip$ip=$_SERVICE['REMOTE_ADDR'];2------根据ip获取主机名gethostbyaddr($ip);3------根据主机名获取IPgethostby ...
- 数据挖掘入门系列教程(十一点五)之CNN网络介绍
在前面的两篇博客中,我们介绍了DNN(深度神经网络)并使用keras实现了一个简单的DNN.在这篇博客中将介绍CNN(卷积神经网络),然后在下一篇博客中将使用keras构建一个简单的CNN,对cifa ...
- node.js koa 实现长轮询
长轮询的实现原理:浏览器发出请求之后,服务端资源如果没有就绪,那么并不立即返回,而是在一个时间范围内,不断地去查询资源是否就绪,如果就绪,就返回资源,如果超时了还没有就绪,就返回超时. 代码实现如下: ...
- Unity(GameObject)
####1. 这个方法用于发送一个数据到指定的方法中,第三个参数是是否强制接收 以下三种方法发送消息的形式,各有不同的效果,可以通过第一个参数指定要发送的方法名名,第二个是发送的参数值,第三个参数是是 ...
- vs code中Vue代码格式化的问题
个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! VSCode自从更新之后,vue文件的html代码格式化就失效了,而且vu ...
- Visual Studio Code插件安装步骤
1.进入扩展视图视图安装或卸载(快捷键Ctrl+shift+x) 转载于:https://www.cnblogs.com/SakalakaZ/p/7725159.html
- Codeforces 1291 Round #616 (Div. 2) C. Mind Control(超级详细)
C. Mind Control You and your n−1 friends have found an array of integers a1,a2,-,an. You have decide ...
- Vxlan L3
拓扑图: CE1 <CE1>display current-configuration !Software Version V800R013C00SPC560B560 !Last conf ...