基础算法题——城市间最短路程(Floyd算法)

本文介绍了Floyd算法用于求解城市间最短路径的方法,包括状态转移方程、问题描述、二维数组的数据结构、初始化设置以及核心代码的解释。通过例子解析了循环层次对算法效率的影响,强调了外层循环k的重要性,帮助理解如何找到最短路径。
摘要由CSDN通过智能技术生成
Floyd算法

通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。
其状态转移方程如下:map[i,j]:=min{map[i,k]+map[k,j],map[i,j]}

问题描述

现已知有N(N<=10)个城市M(M<=30)条路,保证每个城市之间有路,单向到达,每个城市之间的路程不一样,求任意两个城市之间最短路程。
样例输入
4 8 (N M)
1 2 2 (城市名称 城市名称 路程)
1 3 6
1 4 4
2 3 3
3 1 7
3 4 1
4 1 5
4 3 12

样例输出
0 2 5 4 (第一个城市到其他城市的最短路程)
9 0 3 4 (第二个城市到其他城市的最短路程)
6 8 0 1 …
5 7 10 0
题目来自 剑断青丝i

题目分析

在已知输入输出中我们可以得到图中信息:
题目信息

考虑方法

由于该题是城市到城市之间的路程可能是不同的。
所以我们需要考虑一个结构,能够存储两个城市的城市名及路程。这时我们可以考虑使用二维数组。
例如:
城市1到城市2的路程表示:a[1][2] = 2
城市1到城市3的路程表示:a[1][3] = 6
城市3到城市1的路程表示:a[3][1] = 7
二维数组很轻松地帮我们解决了数据存储的问题。

初始化

一开始,我们需要将a[x][x]这类自己城市到自己城市的路程设置为0,将其他路程统一先设置为一个较大的数,方便将来程序比较的时候被替代。

求最短路径核心代码

这段代码很短,但它完成了求最短路程的工作,所以很棒。

//求最短路径核心代码
	for(int k=1; k<=n; k++)
	for(int i=1; i<=n; i++)
	for(int j=1; j<=n; j++)
	if(a[i][j]>a[i][k]+a[k][j])
	a[i]
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值