题目描述:![](https://img-blog.csdnimg.cn/20191011193124811.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMzM4Njk1,size_16,color_FFFFFF,t_70)
解题思路:
- 既然是BFS,那就一定要把给出的数据抽象为图的形式。显然这是一个栅格图,而且,每一个点都只与上下左右四个点相连(当然边界上的点例外),相邻的点对在我们后面提到的遍历队列处理每一个的过程中至关重要。
- BFS算法中,我们要把节点加入待处理的队列中,然后遍历这个队列;注意我们遍历的方法其实就是一个不断入队和出队的过程。队列本身是没有通用的遍历的方法的(不能用for循环处理)。
- 有时,确保我们永远
不会访问一个结点两次
很重要。否则,我们可能陷入无限循环。如果是这样,我们可以在上面的代码中添加一个哈希集来解决这个问题。不过,在这个问题中,我们可以在处理过的点上赋值为0,代表我们确实已经访问过了。
AC代码:
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
//