做题一直使用DFS较多,很少用BFS,之前了解了一下,昨天做题恰好用到了。分享一下自己对BFS的理解,个人感觉仿佛打开了大门。
BFS - 广度优先搜索,就是我们每次走一步,步步拓展开来,最后达到终点(不像DFS一步步深入,不行就返回,走过所有可能)
这里我们从红色的这个点开始,并写上这是第一步。
然后我们往周围的点移动一步,也就是绿色的方块,绿色的方块写上第二步
这样直到我们走到终点的时候,我们最短是走7步。
实际上,我们每次的BFS都类似上面的过程,每次走一步(当然要满足题目条件的一步)。这样直到我们到达终点就可以直到最少最短走了多少步。
当我们明晰了BFS到底是怎么运行的之后,我们可以很容易的得到BFS的代码模板
queue<node> q;
q.push(start); //往队列里放入开头
while(!q.empty())
{
node now = q.front(); //取出现有节点
q.pop();
for()
{
if() q.push(new node) //遍历周围节点,满足条件放入队列,也就是下一步要走的节点
}
}
在这个模板基础上针对题目进行修改即可~