This commit is contained in:
kkunkka
2025-07-10 11:00:25 +08:00
parent 423fefcbbf
commit 6796eda7e5
4 changed files with 189 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
package com.dota.gridGraph._1254;
class Solution {
int n;
int m;
public static void main(String[] args) {
new Solution().closedIsland(new int[][]{
{0,0,1,1,0,1,0,0,1,0},
{1,1,0,1,1,0,1,1,1,0},
{1,0,1,1,1,0,0,1,1,0},
{0,1,1,0,0,0,0,1,0,1},
{0,0,0,0,0,0,1,1,1,0},
{0,1,0,1,0,1,0,1,1,1},
{1,0,1,0,1,1,0,0,0,1},
{1,1,1,1,1,1,0,0,0,0},
{1,1,1,0,0,1,0,1,0,1},
{1,1,1,0,1,1,0,1,1,0}
});
}
public int closedIsland(int[][] grid) {
n = grid.length;
m = grid[0].length;
int res = 0;
var book = new boolean[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (grid[i][j] == 0 && !book[i][j]) {
if (dfs(i, j, grid, book)) {
res++;
}
}
}
}
return res;
}
boolean dfs(int i, int j, int[][] grid, boolean[][] book) {
if (i < 0 || j < 0 || i > n - 1 || j > m - 1) return false;
if (grid[i][j] == 1 || book[i][j]) {
book[i][j] = true;
return true;
}
book[i][j] = true;
return dfs(i + 1, j, grid, book) & dfs(i - 1, j, grid, book) & dfs(i, j + 1, grid, book) & dfs(i, j - 1, grid, book);
}
}

View File

@@ -0,0 +1,43 @@
package com.dota.gridGraph._16_19;
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
public int[] pondSizes(int[][] land) {
int n = land.length, m = land[0].length;
var set = new ArrayList<Integer>();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int t = dfs(i, j, land);
if (t > 0) {
set.add(t);
}
}
}
var res = new int[set.size()];
for (int i = 0; i < set.size(); i++) {
res[i] = set.get(i);
}
Arrays.sort(res);
return res;
}
int[] next = new int[]{1, 0, -1};
int dfs(int i, int j, int[][] land) {
int n = land.length, m = land[0].length;
if (i < 0 || i >= n || j < 0 || j >= m || land[i][j] > 0) {
return 0;
}
land[i][j] = 1;
int t = 1;
for (int i1 : next) {
for (int i2 : next) {
t += dfs(i + i1, j + i2, land);
}
}
return t;
}
}

View File

@@ -0,0 +1,25 @@
package com.dota.gridGraph._2658;
class Solution {
int n = 0;
int m = 0;
public int findMaxFish(int[][] grid) {
int max = 0;
n = grid.length;
m = grid[0].length;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
max = Math.max(max, dfs(i, j, grid));
}
}
return max;
}
int dfs(int i, int j, int[][] grid) {
if (i < 0 || i >= n || j < 0 || j >= m || grid[i][j] == 0) return 0;
int t = grid[i][j];
grid[i][j] = 0;
return t + dfs(i - 1, j, grid) + dfs(i + 1, j, grid) + dfs(i, j - 1, grid) + dfs(i, j + 1, grid);
}
}

View File

@@ -0,0 +1,72 @@
package com.dota.gridGraph.lcs03;
class Solution {
int max = 0;
int n = 0;
int m = 0;
public static void main(String[] args) {
new Solution().largestArea(new String[]{"110","231","221"});
}
public int largestArea(String[] grid) {
n = grid.length;
m = grid[0].length();
var grids = new char[n][m];
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length(); j++) {
grids[i][j] = grid[i].charAt(j);
}
}
var book = new boolean[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (grids[i][j] == '0' || i==0||j==0||i==n-1||j==m-1) {
dfs(i, j, grids[i][j], grids);
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
max = Math.max(max, df(i, j, grids[i][j], grids, book));
}
}
return max;
}
int df(int i, int j, char v, char[][] grids, boolean[][] book) {
if (i < 0 || i >= n || j < 0 || j >= m || grids[i][j] == '6' || grids[i][j] != v || book[i][j]) return 0;
// 遍历过的
book[i][j] = true;
return 1 + df(i - 1, j, v, grids, book) + df(i + 1, j, v, grids, book) + df(i, j - 1, v, grids, book) + df(i, j + 1, v, grids, book);
}
// 靠近走廊的数字全干掉变成6
void dfs(int i, int j, char v, char[][] grids) {
if (i < 0 || i >= n || j < 0 || j >= m || grids[i][j] == '6' || grids[i][j] != v) return;
if (grids[i][j] == '0') {
grids[i][j] = '6';
if (i + 1 < n) {
dfs(i + 1, j, grids[i + 1][j], grids);
}
if (i - 1 >= 0) {
dfs(i - 1, j, grids[i - 1][j], grids);
}
if (j + 1 < m) {
dfs(i, j + 1, grids[i][j + 1], grids);
}
if (j - 1 >= 0) {
dfs(i, j - 1, grids[i][j - 1], grids);
}
return;
}
grids[i][j] = '6';
dfs(i - 1, j, v, grids);
dfs(i + 1, j, v, grids);
dfs(i, j - 1, v, grids);
dfs(i, j + 1, v, grids);
}
}