图是一种重要的数据结构,许多图的算法一开始都会先通过搜索来获取图的结构或者图中结点所保存的信息,图的搜索技巧就是图的相关算法的核心。
图的搜索算法有两种设计核心,分别是BFS(breadth first search)和DFS(depth first search),表示广度优先搜索和深度优先搜索。
1.BFS搜索算法
所谓广度优先算法,就是对图G的边以结点为单位进行系统性的探索来发现从源节点出发能到达的其他所有结点,广度优先算法的特点是搜索位置每到达一个点,就会挨个继续探索这个点的所有连接其他点的边(从上一个点到达这个点的边除外),整体上来看是从图的一个源点出发,在某一个方向上层层递进的搜索方式。BFS算法的设计核心是对于队列这一数据结构的利用,我们在队列中存储的是搜索顺序,队列头就是目前搜索位置所在的结点。
class Solution {
public void search(List<List<Integer>>map) {
/*
* 形参二维数组map表示图,数组的一维表示图的结点,二维表示结点的边所
* 连接的另一个结点。
* 队列BFS表示搜索顺序。
* searchPos用来存储每一个结点的状态(是否被搜索过),
* false表示未被搜索,true表示以被搜索。
*/
Queue<Integer>BFS=new LinkedList<>();
boolean[]searchPos=new boolean[map.size()];
for(int i=0;i<map