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直接相连。

wordpress高级跨屏企业主题 wordpress绿色企业自适应主题

wordpress高级跨屏企业主题,通用响应式跨平台站点开发,自适应PC端+各移动端屏幕设备,高级可视化自定义设置模块+高效的企业站搜索优化。wordpress绿色企业自适应主题采用标准的HTML5+CSS3语言开发,兼容当下的各种主流浏览器: IE 6+(以及类似360、遨游等基于IE内核的)、Firefox、Google Chrome、Safari、Opera等;同时支持移动终端的常用浏览器应...

Vinahost - 越南VPS主机商月6美元 季付以上赠送时长最多半年

Vinahost,这个主机商还是第一次介绍到,翻看商家的介绍信息,是一家成立于2008年的老牌越南主机商,业务涵盖网站设计、域名、SSL证书、电子邮箱、虚拟主机、越南VPS、云计算、越南服务器出租以及设备托管等,机房主要在越南胡志明市的Viettle和VNPT数据中心,其中VNPT数据中心对于国内是三网直连,速度优。类似很多海外主机商一样,希望拓展自己的业务,必须要降价优惠或者增加机房迎合需求用户...

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

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

floyd算法为你推荐
ata考试ata考试只要及格就能拿证吗?如果不能,需要拿多少分?视频托管如何把视频上传到自己公司的网站上?求解···素数算法有能写出所有素数的公式吗刷ip流量如何刷自己网站的IP流量5e5e5e计算器里5.55556e-5是什么意思微信如何只发文字微信朋友圈怎样只发文字云输入法QQ云输入法怎样调整候选词的个数?微信网页版登陆首页微信网页版怎么用?微信网页版怎么登陆?全局钩子delphi 键盘全局钩子医院排队系统医院排队机和医院排队机的区别有哪些?
.cn域名注册 greengeeks 流媒体服务器 softbank官网 iis安装教程 52测评网 上海域名 最好的免费空间 天翼云盘 便宜空间 阿里云官方网站 dnspod web应用服务器 xuni 北京主机托管 xshell5注册码 hosts文件修改 香港打折信息 中国域名根服务器 g6950 更多