动态规划算法最短路径c语言,动态规划算法四:任意两点间的最短路径(floyd-Warshall)...

本文介绍了Floyd-Warshall算法用于找到有向图中任意两点间的最短路径。详细分析了算法原理,并提供了C语言的代码实现,包括最短路径计算和路径打印。通过测试案例展示了算法的运行效果。
摘要由CSDN通过智能技术生成

目录

一、算法分析

二、代码实现

三、测试结果

四、leetcode

一、算法分析

1、 问题描述:

设G=为一有向图,V={1,2,…,n},表示顶点编号;E为边的集合,图G中的每一条边(i, j)∈E,对应的距离值为w[i,j]。 顶点i,j间的距离定义为从i出发到j的最短路径长度。

目的:找出图G中每一个顶点到其他所有顶点的距离(有向图,即A到B与B到A的距离可能不一样)。

约定:若(i,j)∉E,则w[i,j]=∞;若i∈V,w[i,i]=0;

问题输入:表示待权有向图G=的n*n矩阵W。

问题输出:对任意的i, j∈V,i到j的距离以及最短路径。

2、分析过程:

(1)设G中两个不同的顶点i,j∈V,p是从i到j其间仅经过{1,2,…,k}的最短路径。

(2)若p不经过顶点k,则p也是从i到j其间敬经过{1,2,…,k-1}的最短路径。

(3)若p经过顶点k,即p–>k–>j。将这两段分别记为p1,p2,则p1是从i到k其间仅经过{1,2,…,k-1}的最短路径,p2是k到j其间仅经过{1,2,…,k-1}的最短路径。(可由反证法证明)

个人理解:k为i到j的最短路径上的一个顶点,则i到k的最短路径+k到j的最短路径,与i到j的最短路径相同,其顶点必定相同。 判断顶点k是否需要加入最短路径,比较(2)与(3)的结果即可,若(2)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值