200.岛屿数量(深度优先搜索)
这道题可能并不只有一道解法,首先使用深度优先搜索
我们把二维网格看成一个无向图,为了求出无向图,我们需要对其进行深度优先搜索.
当一个位置为1的时候,我们就把其设置为搜索的起点,我们在搜索的过程中,遇到附近的1就将其标记为0
img
例如在,上图,进行第一次深度优先搜索之后,变成如下,我们就到找了一个岛屿
image-20200726081537015.png
Java代码如下:
class DepthSearch {
public int count = 0; //岛屿数量
char[][] g;
private int m;
private int n;
public DepthSearch(char[][] grid, int m, int n) {
this.m = m;//岛屿的宽度
this.n = n;//岛屿的长度
g = grid;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if(g[i][j]=='1')
{
//在搜索过程中岛屿,与1相连的陆地全部被置为0,表示已经搜索过
count++;
dfs(i,j);
}
}
}
}
private void dfs(int i,int j) {
if(i<0||i>n||j<0||j>m||g[i][j]=='0') return;
g[i][j]='0';
dfs(i-1,j);
dfs(i+1,j);
dfs(i,j-1);
dfs(i,j+1);
}
}