算法 test2 Floyd算法求最短距离

问题

用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵)。
在这里插入图片描述

解析

若从Vi到Vj存在一条长度为arcs[i][j]的路径,则进一步判断(Vi,V0,Vj)是否存在,若存在,则比较(Vi,Vj)与(Vi,V0,Vj)的路径长度,取其中长度较短着为从Vi到Vj的中间顶点的序号不大于0的最短路径。

设计

void FLOYD(MGraph G,PathMatrix P,DistancMatrix D)
{ // 用Floyd算法求有向网G中各对顶点v和w之间的最短路径P[v][w]及其带权长度D[v][w]。
	// 若P[v][w][u]为TRUE,则u是从v到w当前求得最短路径上的顶点。
	int u,v,w,i;
	for(v=0;v<G.vexnum;v++) // 各对结点之间初始已知路径及距离
		for(w=0;w<G.vexnum;w++)
		{
			D[v][w]=G.arcs[v][w].adj; // 顶点v到顶点w的直接距离
			for(u=0;u<G.vexnum;u++)
				P[v][w][u]=false; // 路径矩阵初值
			if(D[v][w]<INFINITY) // 从v到w有直接路径
				P[v][w][v]=P[v][w][w]=true; // 由v到w的路径经过v和w两点
		}
	for(u=0;u<G.vexnum;u++)
		for(v=0;v<G.vexnum;v++)
			for(w=0;w<G.vexnum;w++)
				if(D[v][u]<INFINITY&&D[u][w]<INFINITY&&D[v][u]+D[u][w]<D[v][w])
				{ // 从v经u到w的一条路径更短
					D[v][w]=D[v][u]+D[u][w]; // 更新最短距离
					for(i=0;i<G.vexnum;i++)
						P[v][w][i]=P[v][u][i]||P[u][w][i]; // 从v到w的路径经过从v到u和从u到w的所有路径
				}
}

在这里插入图片描述

分析

时间复杂度是O(n^3)

源码

https://github.com/yaoshuangice/yaoshuang

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值