图的遍历与树的遍历基本类似,但要注意两个不同:
1. 图中可能有环路,因此可能会导致死循环;
2. 一个图可能由多个独立的子图构成,因此一条路径走到头后要重新选择尚未遍历的起点。
图的邻接表数据结构请参见:图的邻接表示法Java版
宽度优先遍历
思路
- 选择一个尚未访问的起点,依次访问它的相邻结点;
- 若相邻结点还有相邻结点的话,再依次访问尚未访问的相邻结点;直到以该结点为起点的这条路径上所有的结点都已访问;
- 再选择一个尚未访问的结点作为起点,重复上述操作,直到所有结点都已访问为止;
代码实现
/**
* 图的宽度优先遍历
* PS:本函数用于选择未访问的起点
* @param graph 图的邻接表
*/
public void BFS</