Floyd,Dijkstra的详解

本文详细介绍了Floyd和Dijkstra两种算法在计算图中任意两点间最短路径的应用。Floyd算法通过逐步增加中间节点来寻找最短路径,而Dijkstra算法以起始点为中心向外扩展,直至找到目标点的最短路径。文章通过具体实例和步骤解释了这两种算法的工作原理和实现过程。
摘要由CSDN通过智能技术生成

弗洛伊德算法:

Floyd也就是弗洛伊德算法,是图论中用来计算任意两点间最短路径的算法。

算法的过程是:
1.把图转换成一个带权重的n阶邻接矩阵。
2.依次把1-n的节点当作桥梁,也就是中间点,例如结点u,v和中间结点k,u和v在不经过k结点的时候存在最短   路径x,u经过k结点到达v的时候最短路径为y那么min{x,y}就是在增加k桥梁的时候u和v的最短路径。

Floyd算法执行过程:

例如对于以下的一个有向图,对应的临街矩阵的形式为:



邻接矩阵:


第一步:以定点0作为松弛的点,考虑a[i][j]表示定点i到顶点j经由顶点0的最短路径长度,经过比较,没有任何路径得到修改,因此有:


第二步:以定点1作为松弛的点,考虑a[i][j]表示定点i到顶点j经由顶点1的最短路径长度,经过比较,顶点0到顶点1由原来的没有路径变为0—1—2的路径,其长度为9;因此有:


第三步:以定点2作为松弛的点,考虑a[i][j]表示定点i到顶点j经由顶点2的最短路径长度,经过比较,顶点1到顶点0由原来的没有路径变为1—2—0的路径,其长度为7;

顶点3到顶点0由原来的没有路径变为3—2—0的路径,其长度为4

顶点3到顶点3由原来的没有路径变为3—2—1的路径,其长度为4因此有:



第四步:以定点3作为松弛的点,考虑a[i][j]表示定点i到顶点j经由顶点3的最短路径长度,经过比较,顶点0到顶点2由原来的路径长度为9,路径为 0—1—2,变为0—3—2,其长度为8;

顶点1到顶点0由原来的路径长度为7,路径为1—2—0,变为1—3—2—0,其长度为6;

顶点1到顶点2由原来的路径长度为4,路径为1—2 ,变为1—3—2 ,其长度为3;


如果设n为图中顶点的个数,则弗洛伊德的代码实现:

void floyd()
{
    for(k=0;k<n;k++)
        for(i=0;i<n;i++)
   
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值