广度优先搜索 bfs
广度优先搜索类似于树的按层次遍历的过程,如下图所示。它和队列有很多相似之处,运用了队的许多思想,其实就是对队的深入一步研究,它的基本操作和队列几乎一样。
就是先往“广”的地方找,再一层一层推下去。换句话说就是先把同层的找完,再往下一层去找,是一种“扩散”的思想。每个深度为t的结点一定会在深度为t+1的结点前被搜寻到。
我们先简单复习一下队列的基本概念。
队列及其操作
广度优队列是限定在一端进行插入,另一端进行删除的特殊的线性表。
删除的一端称为队首(closed),插入的一端称为队尾(open)。
例如排队买票,后来的人排在队尾(插入),队首的人先买到票离开(删除)。
队列又称为先进先出表(FIFO, first-in-first-out)。
【例题1】 图的最短路径
下图表示的是从城市A到城市H的交通图。从图中可以看出,从城市A到城市H要经过若干个城市。现要找出一条经过城市最少的一条路线。
样例输入:
8
1 0 0 0 1 0 1 1
0 1 1 1 1 0 1 1
0 1 1 0 0 1 1 1
0 1 0 1 1 1 0 1
1 1 0 1 1 1 0 0
0 0 1 1 1 1 1 0
1 1 1 0 0 1 1 0
1 1 1 1 0 0 0 1