迪杰斯特拉和弗洛伊德

本文详细介绍了迪杰斯特拉算法和弗洛伊德算法在计算有向图或无向图中最短路径的应用。迪杰斯特拉算法通过逐步扩展源点的邻接节点来找到最短距离,而弗洛伊德算法通过三层循环遍历所有节点,更新可能存在的更短路径。以实例说明了两种算法的执行过程,并展示了如何找到如2到3最短路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迪杰斯塔拉算法和弗洛伊德算法功能室求解出有向图或无向图中最短路劲的方法。

迪杰斯特拉大致思想就是依次选择与源点最近的相邻点,然后将相邻点也加入考虑范围(可以经过相邻点),继续计算其他相邻点到远点距离。重复此过程,最终计算出源点到其他点的距离。

例如上图,考虑从V0出发,(-)代表目前无法计算

v0(0)v1(5),v2(2),v3(4),v4(-),v5(-),v6(-)
v0(0),v2(2)v1(5),v3(3)v4(-)v5(3),v6(-)
v0(0),v2(2),v3(3)v1(5),v4(-),v5(3),v6(9)
v0(0),v2(2),v3(3),v5(3)v1(5),v4(-),v6(9)
v0(0),v2(2),v3(3),v5(3),v1(5)v4(8),v6(9)
v0(0),v2(2),v3(3),v5(3),v1(5),v4(8)v6(9)
v0(0),v2(2),v3(3),v5(3),v1(5),v4(8),v6(9)

弗洛伊德算法大致思想是遍历,先将A到B的权值计算出来,然后经过多层遍历,查看是否有例如A到C到B距离会比A到B更短,此方法用于计算出任意亮点的最短距离。
 

 从图中可以清楚看出2到3之间的距离为4,要求2到3最短距离,对路径进行遍历

for (i = 0 ; i < n ; i ++){
    for (j = 0 ; j < n ; j ++ ){
        for (k = 0 ; k < n ; k ++){ 
        if(e[k][j] > e[k][i]+ e [i][j])
            e[k][j] = e [k][i] + e[i][j];
}
}
}

 求得最短距离2到4到3为2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值