diff --git a/src/main/java/com/dota/gridGraph/_1020/Solution.java b/src/main/java/com/dota/gridGraph/_1020/Solution.java new file mode 100644 index 0000000..36b2fb5 --- /dev/null +++ b/src/main/java/com/dota/gridGraph/_1020/Solution.java @@ -0,0 +1,28 @@ +package com.dota.gridGraph._1020; + +class Solution { + public int numEnclaves(int[][] grid) { + var res = 0; + for (int i = 0; i < grid.length; i++) { + for (int j = 0; j < grid[i].length; j++) { + if (i==0||j==0||i==grid.length-1||j==grid[i].length-1) dfs(i, j, grid); + } + } + + for (int[] ints : grid) { + for (int anInt : ints) { + res += anInt; + } + } + return res; + } + + void dfs(int i, int j, int[][] grid) { + if (i<0||j<0||i>=grid.length||j>=grid[0].length||grid[i][j]==0) return; + grid[i][j] = 0; + dfs(i+1, j, grid); + dfs(i-1, j, grid); + dfs(i, j+1, grid); + dfs(i, j-1, grid); + } +} \ No newline at end of file diff --git a/src/main/java/com/dota/gridGraph/_1391/Solution.java b/src/main/java/com/dota/gridGraph/_1391/Solution.java new file mode 100644 index 0000000..999e6da --- /dev/null +++ b/src/main/java/com/dota/gridGraph/_1391/Solution.java @@ -0,0 +1,105 @@ +package com.dota.gridGraph._1391; + +class Solution { + + public boolean hasValidPath(int[][] grid) { + if (grid.length == 1 && grid[0].length == 1) { + return true; + } + + if (grid[0][0] == 4) { + return dfs(1, 0, grid, 2) || dfs(0, 1, grid, 4); + } + if (grid[0][0] == 1) { + return dfs(0, 1, grid, 4); + } + if (grid[0][0] == 2) { + return dfs(1, 0, grid, 2); + } + if (grid[0][0] == 3) { + return dfs(1, 0, grid, 2); + } + if (grid[0][0] == 6) { + return dfs(0, 1, grid, 4); + } + return false; + } + + // last 1 上 2下 3左 4右边 + boolean dfs(int i, int j, int[][] grid, int last) { + if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length) return false; + if (grid[i][j] == 0) return false; + int t = grid[i][j]; + grid[i][j] = 0; + var flag = false; + if (t == 1) { + if (last == 3) { + if (i == grid.length - 1 && j == grid[0].length - 1) flag = true; + else flag = dfs(i, j - 1, grid, last); + } + if (last == 4) { + if (i == grid.length - 1 && j == grid[0].length - 1) flag = true; + else flag = dfs(i, j + 1, grid, last); + } + } + + if (t == 2) { + if (last == 1) { + if (i == grid.length - 1 && j == grid[0].length - 1) flag = true; + else flag = dfs(i - 1, j, grid, last); + } + if (last == 2) { + if (i == grid.length - 1 && j == grid[0].length - 1) flag = true; + else flag = dfs(i + 1, j, grid, last); + } + } + + if (t == 3) { + if (last == 4) { + if (i == grid.length - 1 && j == grid[0].length - 1) flag = true; + else flag = dfs(i + 1, j, grid, 2); + } + if (last == 1) { + if (i == grid.length - 1 && j == grid[0].length - 1) flag = true; + else flag = dfs(i, j - 1, grid, 3); + } + } + + if (t == 4) { + if (last == 1) { + if (i == grid.length - 1 && j == grid[0].length - 1) flag = true; + else flag = dfs(i, j + 1, grid, 4); + } + + if (last == 3) { + if (i == grid.length - 1 && j == grid[0].length - 1) flag= true; + else flag= dfs(i + 1, j, grid, 2); + } + } + + if (t == 5) { + if (last == 2) { + if (i == grid.length - 1 && j == grid[0].length - 1) flag= true; + else flag= dfs(i, j - 1, grid, 3); + } + if (last == 4) { + if (i == grid.length - 1 && j == grid[0].length - 1) flag= true; + else flag= dfs(i - 1, j, grid, 1); + } + } + + if (t == 6) { + if (last == 2) { + if (i == grid.length - 1 && j == grid[0].length - 1) flag= true; + else flag= dfs(i, j + 1, grid, 4); + } + if (last == 3) { + if (i == grid.length - 1 && j == grid[0].length - 1) flag= true; + else flag= dfs(i - 1, j, grid, 1); + } + } + + grid[i][j] = t; + return flag; + } +} \ No newline at end of file