kk
This commit is contained in:
49
src/main/java/com/dota/gridGraph/_1254/Solution.java
Normal file
49
src/main/java/com/dota/gridGraph/_1254/Solution.java
Normal 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);
|
||||
}
|
||||
}
|
43
src/main/java/com/dota/gridGraph/_16_19/Solution.java
Normal file
43
src/main/java/com/dota/gridGraph/_16_19/Solution.java
Normal 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;
|
||||
}
|
||||
}
|
25
src/main/java/com/dota/gridGraph/_2658/Solution.java
Normal file
25
src/main/java/com/dota/gridGraph/_2658/Solution.java
Normal 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);
|
||||
}
|
||||
}
|
72
src/main/java/com/dota/gridGraph/lcs03/Solution.java
Normal file
72
src/main/java/com/dota/gridGraph/lcs03/Solution.java
Normal 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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user