这道题巧妙用了深度遍历和广度遍历
深度遍历比较好理解,找到一个陆地,数值为“1”,然后深度遍历,将其周围的陆地都包括进去,构成一个岛屿,重点的是遍历过的陆地,要改为“0”,表示已经访问过了。
广度遍历,也是找到一个陆地,然后将其入队列,之后遍历其上下左右的网格,是否是陆地,如果是的话,就进入队列。直到队列为空,才说明以这个陆地为起点的周围的陆地都已经包括进去了,一起形成了一个岛屿。其中重要的一点,除了上面说的,遍历过的陆地要改为“0”,表示已经访问过了,还要巧妙的用pair,记录该网格点的坐标,即queue<pair<int,int>>que,它有两个成员变量,que.first我们用它表示横坐标,que.second用它表示纵坐标,在push的时候使用花括号,即que.push({i,j}).


网友评论