floyd算法谁可以给我讲一下floyd算法吗?

floyd算法  时间:2021-06-19  阅读:()

floyd算法

int d[MAXN][MAXN]; void floyd() { for(int k=1;k<=n;++k){ for(int i=1;i<=n;++i) for(int j=1;j<=n;++j){ d[i][j]=d[i][j]<d[i][k]+d[k][j]?d[i][j]:d[i][k]+d[k][j]; } } }

求一C# floyd算法代码

#include<stdio.h> #include<string.h> int path[101][101]={0}; void p(int e,int s) { int k=path[e][s]; if(k!=0) { p(e,k); printf(" %d",k); p(k,s); } } int main() { memset(path,0,sizeof(path)); int adj[101][101]; int n; scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { scanf("%d",&adj[i][j]); if(adj[i][j]==0) adj[i][j]=65535; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) if(k!=i) for(int j=1;j<=n;j++) if(j!=i && j!=k) { if(adj[i][k]+adj[k][j]<adj[i][j]) { adj[i][j]=adj[i][k]+adj[k][j]; path[i][j]=k; } } int s,e; scanf("%d%d",&s,&e); if(adj[s][e]==65535) printf("No way!! "); else { printf("%d ",adj[s][e]); printf("%d",s); p(s,e); printf(" %d ",e); } return 0; } /* 著名的floyd算法,它是多源最短路径算法,也就说可以给除任意两结点的最短路, 如果它们有路,时间复杂度O(n^3)

算法分析: 先提出疑问,这个算法是怎样做到求最短路径的呢? 其实对于最短路,我们说的路最短也就是是权值最小,并不是单方面的说路的长度 这个权值可以是造价,耗费,长度,时间等等,我们首先要理解这一点。

从小张家到小李家有50米的路程,到小王家有10米,小王家到小李家20米远,这时我们 要从小张家到王家最少要走多远,答案是30米,我们选择路线的时候没有直接走过去,而且发现 了一中转点,可以使得整个路程更短。

其实floyd就用了这种思想,第一个循环枚举了用哪个 点来作为中转,第二第三循环枚举从谁走到谁,通过枚举所有的情况,最后就会得到最小值。

这时你会想,一个最短路是看整体的整个图来确定的,为什么每次两个点就可以搞定呢? 其实是这样的,每个使用过的点,在前一阶段求出了一个值,这时候再用它就等于已经继承了 它前面所计算出来的最短路的值,同过这个最短值上再去选择一条路,然后新形成的路还是一条 最短路,只是起终点不一样罢了。

这个算法抽象度较高,需加以图解和多想,掌握这个算法比较重要,它的思想在以后的 图论学习中比较重要,特别是继承的这种思想和松弛技术。

*/

谁可以给我讲一下floyd算法吗?

1核心思路编辑 通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。

从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1);又用同样地公式由D(1)构造出D(2);……;最后又用同样的公式由D(n-1)构造出矩阵D(n)。

矩阵D(n)的i行j列元素便是i号顶点到j号顶点的最短路径长度,称D(n)为图的距离矩阵,同时还可引入一个后继节点矩阵path来记录两点间的最短路径。

采用的是(松弛技术),对在i和j之间的所有其他点进行一次松弛。

所以时间复杂度为O(n^3); 其状态转移方程如下: map[i,j]:=min{map[i,k]+map[k,j],map[i,j]} map[i,j]表示i到j的最短距离,K是穷举i,j的断点,map[n,n]初值应该为0,或者按照题目意思来做。

当然,如果这条路没有通的话,还必须特殊处理,比如没有map[i,k]这条路 2算法过程编辑 1,从任意一条单边路径开始。

所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。

2,对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比已知的路径更短。

如果是更新它。

把图用邻接矩阵G表示出来,如果从Vi到Vj有路可达,则G[i,j]=d,d表示该路的长度;否则G[i,j]= 无穷大。

定义一个矩阵D用来记录所插入点的信息,D[i,j]表示从Vi到Vj需要经过的点,初始化D[i,j]=j。

把各个顶点插入图中,比较插点后的 距离与原来的距离,G[i,j] = min( G[i,j], G[i,k]+G[k,j] ),如果G[i,j]的值变小,则D[i,j]=k。

在G中包含有两点之间最短道路的信息,而在D中则包含了最短通路径的信息。

比如,要寻找从V5到V1的路径。

根据D,假如D(5,1)=3则说明从V5到V1经过V3,路径为{V5,V3,V1},如果D(5,3)=3,说明V5与V3直接相连,如果D(3,1)=1,说明V3与V1直接相连。

pacificrack:2021年七夕VPS特别促销,$13.14/年,2G内存/2核/60gSSD/1T流量,支持Windows

pacificrack官方在搞2021年七夕促销,两款便宜vps给的配置都是挺不错的,依旧是接入1Gbps带宽,KVM虚拟、纯SSD raid10阵列,支持包括Linux、Windows 7、10、server2003、2008、2012、2016、2019在内多种操作系统。本次促销的VPS请特别注意限制条件,见本文末尾!官方网站:https://pacificrack.com支持PayPal、支...

TmhHost 全场八折优惠且充值返10% 多款CN2线路

TmhHost 商家是一家成立于2019年的国人主机品牌。目前主营的是美国VPS以及美国、香港、韩国、菲律宾的独立服务器等,其中VPS业务涵盖香港CN2、香港NTT、美国CN2回程高防、美国CN2 GIA、日本软银、韩国cn2等,均为亚太中国直连优质线路,TmhHost提供全中文界面,支持支付宝付款。 TmhHost黑五优惠活动发布了,全场云服务器、独立服务器提供8折,另有充值返现、特价服务器促销...

TMThosting夏季促销:VPS月付7折,年付65折,独立服务器95折,西雅图机房

TMThosting发布了一个2021 Summer Sale活动,针对西雅图VPS主机提供月付7折优惠码,年付65折优惠码,独立服务器提供95折优惠码,本轮促销活动到7月25日。这是一家成立于2018年的国外主机商,主要提供VPS和独立服务器租用业务,数据中心包括美国西雅图和达拉斯,其中VPS基于KVM架构,都有提供免费的DDoS保护,支持选择Windows或者Linux操作系统。Budget ...

floyd算法为你推荐
createfile失败惠普机看机提示create file fail 无法进桌面pat是什么格式怎么能把常用格式的图片转换成PAT格式的呀~shoujiao如何区分是不是颈椎病?ocr软件下载如何安装汉王ocr文字识别软件东兴证券网站东兴证券超强版下载怎么查微信注册时间怎么查一个微信公众号的注册时间,发了多少条内容怎样删除聊天记录自己已发出的微信聊天记录怎样删除才不会让对方看见短信套餐中国移动发短信有什么套餐比较好idataparameterweighting parameter是什么意思网页背景音乐代码网页背景音乐代码,我要哪怕转换网页都不间断的那种
淘宝二级域名 vir 新加坡主机 jsp主机 韩国加速器 日志分析软件 web服务器架设软件 丹弗 柚子舍官网 双11秒杀 129邮箱 卡巴斯基试用版 qq对话框 网站在线扫描 银盘服务 彩虹云 中国电信网络测速 个人免费邮箱 华为k3 双线空间 更多