200. 岛屿数量
给你一个由
'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 示例 1:
输入:11110110101100000000输出: 1
示例 2:
输入:11000110000010000011输出: 3解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。
解题思路
求连通图数量,可以用深度优先搜索和广度优先搜索遍历,能遍历完一个就算是一个连通图,遍历过程中注意把遍历过的标记一下,防止重复遍历。遍历完一个连通图后,下一次开始遍历的位置就是从没有被标记过的地方开始。
代码实现
/*求连通图数量,可以用深度优先搜索和广度优先搜索遍历,能遍历完一个就算是一个连通图*/class Solution {public:vector<vector<char>> graph;int heng,zong;void dep(int x,int y){if(x>=heng || y>=zong || x<0 || y<0)return;if( graph[x][y] == '0' )return;graph[x][y] = '0' ;//标记为已经遍历过dep(x,y-1);//往水平向左方向探查dep(x,y+1);//往水平向右方向探查dep(x+1,y);//往竖直向下方向探查dep(x-1,y);//往竖直向上方向探查}int numIslands(vector<vector<char>>& grid) {graph = grid;heng = graph.size();if(heng != 0)zong = graph[0].size();int num = 0;for(int i = 0; i<heng;i++) {for(int j=0;j<zong;j++) {if( graph[i][j] == '0' )continue;dep(i,j);num++;}}return num;}};
