200. 岛屿数量
DFS
//对数组的每一个值为1的节点进行深度优先遍历,遍历的范围为该节点上下左右的节点
//在遍历的过程中将其值标记为1作为标记
class Solution {
public int numIslands(char[][] grid) {
int count = 0;
//对每一个节点进行判断
for(int i=0; i<grid.length; ++i){
for(int j=0; j<grid[0].length; ++j){
//若节点值为1,说明是一个新的岛屿,对其进行遍历,将岛屿中节点的值置为0,岛屿数量加一
if(grid[i][j]=='1'){
dfs(grid,i,j);
count++;
}
}
}
return count;
}
public void dfs(char[][] grid, int i, int j){
//其他条件是为了限制节点在网格内
//节点值为0,说明已经超出该岛屿范围
if(i<0 || j<0 || i>=grid.length || j>=grid[0].length || grid[i][j]=='0') return;
//将该节点的值置0,作为标记
grid[i][j]='0';
//对上下左右的节点进行遍历
dfs(grid,i+1,j);
dfs(grid,i,j+1);
dfs(grid,i-1,j);
dfs(grid,i,j-1);
}
}
BFS
class Solution {
public int numIslands(char[][] grid) {
int count=0;
for(int i=0;i<grid.length;++i){
for(int j=0;j<grid[0].length;++j){
if(grid[i][j]=='1'){
bfs(grid,i,j);
count++;
}
}
}
retu