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

gcorelabs远东khabarovsk伯力Cloud云服务器测评,告诉你gcorelabs云服务器怎么样

说明一下:gcorelabs的俄罗斯远东机房“伯力”既有“Virtual servers”也有“CLOUD SERVICES”,前者是VPS,后者是云服务器,不是一回事;由于平日大家习惯把VPS和云服务器当做一回事儿,所以这里要特别说明一下。本次测评的是gcorelabs的cloud,也就是云服务器。 官方网站:https://gcorelabs.com 支持:数字加密货币、信用卡、PayPal...

轻云互联,香港云服务器折后22元/月 美国云服务器 1核 512M内存 15M带宽 折后19.36元/月

轻云互联成立于2018年的国人商家,广州轻云互联网络科技有限公司旗下品牌,主要从事VPS、虚拟主机等云计算产品业务,适合建站、新手上车的值得选择,香港三网直连(电信CN2GIA联通移动CN2直连);美国圣何塞(回程三网CN2GIA)线路,所有产品均采用KVM虚拟技术架构,高效售后保障,稳定多年,高性能可用,网络优质,为您的业务保驾护航。官方网站:点击进入广州轻云网络科技有限公司活动规则:1.用户购...

ATCLOUD-KVM架构的VPS产品$4.5,杜绝DDoS攻击

ATCLOUD.NET怎么样?ATCLOUD.NET主要提供KVM架构的VPS产品、LXC容器化产品、权威DNS智能解析、域名注册、SSL证书等海外网站建设服务。 其大部分数据中心是由OVH机房提供,其节点包括美国(俄勒冈、弗吉尼亚)、加拿大、英国、法国、德国以及新加坡。 提供超过480Gbps的DDoS高防保护,杜绝DDoS攻击骚扰,比较适合海外建站等业务。官方网站:点击访问ATCLOUD官网活...

floyd算法为你推荐
互联网舆情监控系统最好的舆情监控软件爱短信官网求助。爱短信爱聊怎么用?刷ip流量请问刷流量刷IP有什么用的!averagesPoisson-Arrivals-See-Time-Averages是什么意思微信如何只发文字微信朋友圈如何只发文字,怎么发文字不要图网站客服代码在线客服系统的代码添加到网站中,要怎么做?erp系统教程ERP系统怎么使用彩信平台目前国内有哪些短信平台服务商,怎么排名?particular教程如何用AE做出花瓣从身体变出来的特效validdatevalid use date 什么意思
海外域名 vps优惠码 老左 lamp安装 阿里云os 美元争夺战 2014年感恩节 56折 香港新世界电讯 512au 国外在线代理 91vps ca187 申请免费空间 浙江服务器 摩尔庄园注册 服务器托管价格 web服务器 建站论坛 卡巴斯基免费下载 更多