200. 岛屿数量

桃扇骨 2023-07-20 12:24 23阅读 0赞

题目:

200. 岛屿数量
在这里插入图片描述

题解:dfs

典型的dfs模板题,注意一下访问控制条件即可。
在这里插入图片描述
在这里插入图片描述

代码:dfs

  1. /** * code200 */
  2. public class code200 {
  3. public static int numIslands(char[][] grid) {
  4. if(grid.length == 0)
  5. {
  6. return 0;
  7. }
  8. int m = grid.length;
  9. int n = grid[0].length;
  10. boolean visited[][] = new boolean[m][n];
  11. int count = 0;
  12. for(int i = 0; i < m; i++)
  13. {
  14. for(int j = 0; j < n; j++)
  15. {
  16. // 如果是岛屿中的一个点,并且没有被访问过,就进行深度优先遍历
  17. if(grid[i][j] == '1' && !visited[i][j])
  18. {
  19. dfs(i, j, m, n, grid, visited);
  20. count++;
  21. }
  22. }
  23. }
  24. return count;
  25. }
  26. // 从坐标为 (i,j) 的点开始进行深度优先遍历
  27. public static void dfs(int i, int j, int m, int n, char grid[][], boolean visited[][])
  28. {
  29. if(i < 0 || i >= m || j < 0 || j >= n || grid[i][j] != '1' || visited[i][j])
  30. {
  31. return;
  32. }
  33. visited[i][j] = true;
  34. dfs(i + 1, j, m, n, grid, visited);
  35. dfs(i - 1, j, m, n, grid, visited);
  36. dfs(i, j + 1, m, n, grid, visited);
  37. dfs(i, j - 1, m, n, grid, visited);
  38. }
  39. public static void main(String[] args) {
  40. char[][] grid1 = {
  41. { '1', '1', '1', '1', '0'},
  42. { '1', '1', '0', '1', '0'},
  43. { '1', '1', '0', '0', '0'},
  44. { '0', '0', '0', '0', '0'}};
  45. int res1 = numIslands(grid1);
  46. System.out.println(res1);
  47. char[][] grid2 = {
  48. { '1', '1', '0', '0', '0'},
  49. { '1', '1', '0', '0', '0'},
  50. { '0', '0', '1', '0', '0'},
  51. { '0', '0', '0', '1', '1'}};
  52. int res2 = numIslands(grid2);
  53. System.out.println(res2);
  54. }
  55. }

参考:

  1. 岛屿数量
  2. DFS + BFS + 并查集(Python 代码、Java 代码)
  3. 朴实无华的深度优先遍历(最简单最直接c++)
  4. 深度优先搜索,希望大家喜欢

发表评论

表情:
评论列表 (有 0 条评论,23人围观)

还没有评论,来说两句吧...

相关阅读

    相关 200. 岛屿数量

    200. 岛屿数量 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上

    相关 leetcode200. 岛屿数量

    给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包

    相关 【leetcode.200岛屿数量

    一、题目描述 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地

    相关 LeetCode200. 岛屿数量

    题目难度:中等 题目描述: > 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 > 岛屿总是被水包围,并且每座岛屿只能由水平方

    相关 200. 岛屿数量

    > 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 > > 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接