DFS
最简单的一种方式就是遍历数组中的每一个值,如果是1就说明是岛屿,然后把它置为0或者其他的字符都可以,只要不是1就行,然后再遍历他的上下左右4个位置。如果是1,说明这两个岛屿是连着的,只能算是一个岛屿,我们还要把它置为0,然后再以它为中心遍历他的上下左右4个位置……。如果是0,就说明不是岛屿,就不在往他的上下左右4个位置遍历了。
每个位置只要是1,先要把它置为0,然后沿着他的上下左右4个方向继续遍历,执行同样的操作,要注意边界条件的判断。
function solve( grid ) {
function dfs(i,j){
//边界条件判断,不能越界
if( i<0 || i>=grid.length )
return;
if( j<0 || j>=grid[i].length )
return;
if(grid[i][j] == '0')
return;
//把当前格子置为0,然后再从他的上下左右4个方向继续遍历
grid[i][j] = '0';
dfs(i-1,j);
dfs(i+1,j);
dfs(i,j-1);
dfs(i,j+1);
}
if(grid.length == 0)//边界条件判断
return 0;
let count = 0;//岛屿个数
for(let i=0; i<grid.length; i++){
for(let j=0; j<grid[i].length; j++){
//只有当前格子是1才开始计算
if(grid[i][j]=='1'){
count++;//如果当前格子是1,岛屿的数量加1
dfs(i,j);//然后通过dfs把当前格子的上下左右4个位置为1的都要置为0,因为他们是连着一起的算一个岛屿,
}
}
}
return count;
}