思路
广度优先遍历可以用来看从头走到我要的目的地,需要走几步;
从当前结点开始,每次寻找它相连的所有节点,在每一次遍历完当前节点相邻的所有节点之后,step++,就相当于更深了一层;
要有数组来记录我们已经遍历过的节点,标记节点,防止重复遍历。
基本如下:
//之前把起点先加入队列,定义好队列q,标记数组visited
while(q not empty) {
step++;//更新深度
int sz = q.size();
for (int i = 0; i < sz; i++) {
Node cur = q.poll();
if (cur is target)//到达目的地,返回step值
return step;
for (Node x : cur.adj())//将cur的节点挨个加入队列
if (x not in visited) {
//未被遍历过
q.offer(x);
visited.add(x);
}
}
}