1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| package questions;
import java.util.Deque; import java.util.LinkedList;
public class _2684矩阵中移动的最大次数 {
public int maxMoves_dp(int[][] grid) { int n = grid.length, m = grid[0].length, max = 0; int[][] dp = new int[n][m]; return max; }
public int maxMoves_bfs(int[][] grid) { int n = grid.length, m = grid[0].length, max = 0; boolean[][] visited = new boolean[n][m]; Deque<int[]> queue = new LinkedList<>(); for (int i = 0; i < n; i++) { queue.addLast(new int[]{i, 0}); } while (!queue.isEmpty()) { int[] ints = queue.pollFirst(); int i = ints[0]; int j = ints[1]; if (!visited[i][j]) { visited[i][j] = true; max = Math.max(max, j); if (j == m - 1) { return max; } if (grid[i][j] < grid[i][j + 1]) { queue.addLast(new int[]{i, j + 1}); } if (i - 1 >= 0 && grid[i][j] < grid[i - 1][j + 1]) { queue.addLast(new int[]{i - 1, j + 1}); } if (i + 1 < n && grid[i][j] < grid[i + 1][j + 1]) { queue.addLast(new int[]{i + 1, j + 1}); } } } return max; }
public int maxMoves(int[][] grid) { int n = grid.length, m = grid[0].length, max = 0; boolean[][] visited = new boolean[n][m]; for (int i = 0; i < grid.length; i++) { int dfs = dfs(grid, visited, i, 0); if (dfs == m - 1) return dfs; max = Math.max(max, dfs); } return max; }
private int dfs(int[][] grid, boolean[][] visited, int i, int j) { if (j == grid[0].length - 1) return 0; if (visited[i][j]) return 0; visited[i][j] = true; int temp1 = 0, temp2 = 0, temp3 = 0; if (grid[i][j] < grid[i][j + 1]) { temp1 = 1 + dfs(grid, visited, i, j + 1); } if (i - 1 >= 0 && grid[i][j] < grid[i - 1][j + 1]) { temp2 = 1 + dfs(grid, visited, i - 1, j + 1); } if (i + 1 < grid.length && grid[i][j] < grid[i + 1][j + 1]) { temp3 = 1 + dfs(grid, visited, i + 1, j + 1); } return Math.max(temp1, Math.max(temp2, temp3)); }
public static void main(String[] args) { _2684矩阵中移动的最大次数 q = new _2684矩阵中移动的最大次数();
System.out.println(q.maxMoves_bfs(new int[][]{ {3, 2, 4}, {2, 1, 9}, {1, 1, 7} }));
} }
|