岛屿数量——BFS / DFS对比
DFS 解法
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'){ dfs(grid,i,j); count++; } } } return count; } //DFS深度优先遍历 public static void dfs(char[][] grid,int i,int j){ if(i>=0&&i<grid.length&&j>=0&&j<grid[0].length&&grid[i][j]=='1') { grid[i][j]='0'; dfs(gird,i,j-1); dfs(grid,i-1,j); dfs(grid,i+1,j); dfs(gird,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++; } } } return count; } //BFS 广度优先遍历 public static void bfs(char[][] grid,int i,int j){ Queue<int[]> queue=new LinkedList<>(); queue.add(new int[]{i,j}); while(!queue.isEmpty()){ int[] cur=queue.poll(); i=cur[0]; j=cur[1]; if(i>=0&&i<grid.length&&j>=0&&j<grid[0].length&&grid[i][j]=='1'){ grid[i][j]='0'; queue.add(new int[]{i,j-1}); queue.add(new int[]{i-1,j}); queue.add(new int[]{i+1,j}); queue.add(new int[]{i,j+1}); } } } }