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

华为云年中聚惠618活动,新用户专区,云服务器低至88元/年,3年仅580.98元,热销抢购中,最后2天!

华为云怎么样?华为云用在线的方式将华为30多年在ICT基础设施领域的技术积累和产品解决方案开放给客户,致力于提供稳定可靠、安全可信、可持续创新的云服务,做智能世界的“黑土地”,推进实现“用得起、用得好、用得放心”的普惠AI。华为云作为底座,为华为全栈全场景AI战略提供强大的算力平台和更易用的开发平台。本次年终聚惠618活动相当给力,1核2G内存1m云耀云服务器仅88元/年起,送主机安全基础版套餐,...

CloudCone(20美元/年)大硬盘VPS云服务器,KVM虚拟架构,1核心1G内存1Gbps带宽

近日CloudCone商家对旗下的大硬盘VPS云服务器进行了少量库存补货,也是悄悄推送了一批便宜VPS云服务器产品,此前较受欢迎的特价20美元/年、1核心1G内存1Gbps带宽的VPS云服务器也有少量库存,有需要美国便宜大硬盘VPS云服务器的朋友可以关注一下。CloudCone怎么样?CloudCone服务器好不好?CloudCone值不值得购买?CloudCone是一家成立于2017年的美国服务...

6元虚拟主机是否值得购买

6元虚拟主机是否值得购买?近期各商家都纷纷推出了优质便宜的虚拟主机产品,其中不少6元的虚拟主机,这种主机是否值得购买,下面我们一起来看看。1、百度云6元体验三个月(活动时间有限抓紧体验)体验地址:https://cloud.baidu.com/campaign/experience/index.html?from=bchPromotion20182、Ucloud 10元云主机体验地址:https:...

floyd算法为你推荐
小明发布首页永久网站2015小明发布看看永久域在哪里能找到免费的短信营销方案短信营销怎么才能更有效果呢?防火墙技术应用防火墙的应用与研究论文空间导航怎么把空间的导航变成只有留言板跟相册空间导航QQ空间中如何自定义导航?particular教程怎样做ae粒子云效果backupexec怎样在vmware vcenter上安装backup exec agent for windowsidataparameterweighting parameter是什么意思微盟价格微盟渠道代理政策是怎么样的?网页背景音乐代码网站背景音乐HTML代码
个人虚拟主机 武汉域名注册 网站虚拟主机空间 winscp 服务器评测 softbank官网 服务器怎么绑定域名 京东商城0元抢购 howfile 工信部icp备案号 hkt 支持外链的相册 免费私人服务器 网页提速 上海电信测速网站 阿里云官方网站 太原联通测速 服务器维护 独立主机 德讯 更多