求解最短路径的问题可以使用广度优先搜索,主要思路:
-
使用图来建立模型
-
使用广度优先遍历,找到满足条件的点为终点
广度优先遍历就是 从起始点,按关系由近到远进行遍历。
对于广度优先遍历通常使用的数据结构为队列(FIFO),具体还是比较简单的。
那么求解最短路径,主要有三点:
- 图的表示:使用散列表的数据结构,存储每个点及其相邻点,如 {‘node0’: [‘node1’, ‘node2’]}
- 双向队列存储要搜索的点,当队列不为空时,从队列一端取要检查的点,满足条件结束,否则,将其相邻点放入另一端
- 避免重复检查,陷入死循环,检查过的点要保存,如果是检查过的点直接跳过
与广度优先对应的另外一种叫深度优先遍历,常用的实现方法是递归。