Floyd-Warshall算法

本文介绍了一种求解所有顶点对之间最短路径的经典算法——Floyd-Warshall算法。通过数学归纳法证明了算法的正确性,并详细解释了如何利用该算法逐步更新中间节点来获取最短路径权值。

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

输入是n*n的矩阵W,输出是各顶点间的最短路径权值的矩阵D(n)D(k)表示中间节点限制为(1,2,…,k)时的各顶点间最短路径权值矩阵,d(i,j,k)表示D(k)中点对(i,j)的最短路径权值。

 

FLOYD-WARSHALL(W)

n=rows(W)

for k=1 to n

 for i=1 to n

  for j=1 to n

   d(i,j,k)=min(d(i,j,k-1),d(i,k,k-1)+d(k,j,k-1))

return D(n)

 

数学归纳法证明其正确性:

 

问题:证明采用以上代码,D(k)表示中间节点为(1,2,...,k)时的各顶点间的最短路径权值的矩阵。(当k=n时,即结果)

证明:D(0)初始化为直接相连的顶点之间的权值,也即表示无中间节点的情况。

假设当k=iD(k)表示中间节点为(1,2,...,i)时的各顶点间的最短路径权值。

则当k=i+1

  若点i不是点对(m,n)最短路径的中间节点,则显然d(i,j,k)= d(i,j,k-1)

  若点i是点对(m,n)最短路径的中间节点,则点对(m,n)之间的最短路径可以分解为(m,k),(k,n)之间的最短路径。则必然有d(i,j,k)= d(i,k,k-1)+d(k,j,k-1)

 

于是可以看到,D(k)表示中间节点为(1,2,...,k)时的各顶点间的最短路径权值的矩阵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值