浅析:无权值最短路径算法(BFS)

675. 为高尔夫比赛砍树

 

本篇文章介绍一种简单类型的「最短路径」算法

提到「最短路径」算法,首先可以想到的肯定是「Dijkstra 算法」,但是「Dijkstra 算法」一般适用于有权值且权值为正的情况。关于「Dijkstra 算法」详细实现可见 最短路径-Dijkstra

而我们今天要介绍的题目是无权值的类型,所以如果使用「Dijkstra 算法」,就略显复杂了!!

同时,对于「Dijkstra 算法」,一般计算的是其他所有点到起点的距离;而有些题目仅仅只需要计算两个点的距离而已!

问题分析

对于今天的问题,有两个前提条件「没有两棵树的高度是相同的」且「需要按照树的高度从低向高砍掉所有的树」

所以我们只需要对所有树的高度升序排列,然后依次计算两点之间的距离即可!!最后我们的问题就抽象成「计算两点之间的距离」

整理一下这个问题的特点

我们可以使用 BFS 一层一层的向外扩张,每扩张一层,距离 ➕1。如下图:

2

当我们在向外扩张时,记录一下层数,就可以得到两点之间的距离

代码实现