题解 | #岛屿数量#
岛屿数量
https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 判断岛屿数量 * @param grid char字符型二维数组 * @return int整型 */ static int cnt; // static boolean vis[][] = new boolean[201][201]; static int[][] direction = new int[][]{{-1, 0}, {0, 1}, {1, 0},{0 ,-1}}; public int solve (char[][] grid) { // write code here if (grid.length == 0){ return 0; } if(grid[0].length == 0){ return 0; } // vis数组,表示这个点有没有被访问过 boolean[][] vis = new boolean[grid.length][grid[0].length]; // 遍历整张图上的每一个点,如果是为1且没有被访问过,结果加1,并且进行dfs for(int i = 0; i < grid.length; i++){ for(int j = 0; j < grid[0].length; j++){ if(!vis[i][j] && grid[i][j] == '1'){ cnt++; dfs(grid, vis, i, j); } } } return cnt; } void dfs(char[][] grid, boolean[][] vis, int x, int y){ if(x < 0 || y < 0 || x >= grid.length || y >= grid[0].length || vis[x][y] || grid[x][y] == '0'){ return; } // vis for(int i = 0; i < direction.length; i++){ vis[x][y] = true; int xi = direction[i][0] + x; int yi = direction[i][1] + y; dfs(grid, vis, xi, yi); // vis[x][y] = false; } } }