欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

leetcode1020.飞地的数量

时间:2023-06-10
飞地的数量

代码(dfs)
力扣链接 代码(dfs)

class Solution { int m; int n; boolean[][] visited; static final int[][] DIRS = new int[][]{{0,1},{0,-1},{-1,0},{1,0}}; public int numEnclaves(int[][] grid) { m = grid.length; n = grid[0].length; visited = new boolean[m][n]; //从所有和网格边界相邻的陆地格出发,最后遍历所有陆地格,如果未被访问过,则说明其是飞地 for (int i = 0; i < m; ++i) { dfs(grid, i, 0); dfs(grid, i, n - 1); } for (int i = 1; i < n - 1; ++i) { dfs(grid, 0, i); dfs(grid, m - 1, i); } int res = 0; //记录飞地数量 for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (!visited[i][j] && grid[i][j] == 1) { ++res; } } } return res; } void dfs(int[][] grid, int i, int j) { if (i >= 0 && i < m && j >= 0 && j < n && grid[i][j] == 1 && !visited[i][j]) { visited[i][j] = true; for (int[] dir : DIRS) { int x = i + dir[0]; int y = j + dir[1]; dfs(grid, x, y); } } }}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。