admin 题解分享 · 2024/4/17
LITS 游戏(编程题) - 题解
视频中标准程序代码如下: ```java import java.util.*; class Main { static final int N = 55; static int[][] a = new int[N][N]; static int f = 0; static int n; static void dfs(int step) { if (f != 0) return; if (step == 1) { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { if (j + 3 <= n) { if (a[i][j] + a[i][j + 1] + a[i][j + 2] + a[i][j + 3] == 4) { a[i][j] = a[i][j + 1] = a[i][j + 2] = a[i][j + 3] = step + 1; dfs(step + 1); a[i][j] = a[i][j + 1] = a[i][j + 2] = a[i][j + 3] = 1; } } if (i + 3 <= n) { if (a[i][j] + a[i + 1][j] + a[i + 2][j] + a[i + 3][j] == 4) { a[i][j] = a[i + 1][j] = a[i + 2][j] = a[i + 3][j] = step + 1; dfs(step + 1); a[i][j] = a[i + 1][j] = a[i + 2][j] = a[i + 3][j] = 1; } } } } else if (step == 2) { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { if (i + 1 <= n && j + 2 <= n) { if (a[i][j] == 1 && a[i][j + 1] == 1 && a[i][j + 2] == 1 && a[i + 1][j + 1] == 1) { a[i][j] = a[i][j + 1] = a[i][j + 2] = a[i + 1][j + 1] = step + 1; dfs(step + 1); a[i][j] = a[i][j + 1] = a[i][j + 2] = a[i + 1][j + 1] = 1; } if (a[i + 1][j] == 1 && a[i + 1][j + 1] == 1 && a[i + 1][j + 2] == 1 && a[i][j + 1] == 1) { a[i + 1][j] = a[i + 1][j + 1] = a[i + 1][j + 2] = a[i][j + 1] = step + 1; dfs(step + 1); a[i + 1][j] = a[i + 1][j + 1] = a[i + 1][j + 2] = a[i][j + 1] = 1; } } if (i + 2 <= n && j + 1 <= n) { if (a[i][j] == 1 && a[i + 1][j] == 1 && a[i + 2][j] == 1 && a[i + 1][j + 1] == 1) { a[i][j] = a[i + 1][j] = a[i + 2][j] = a[i + 1][j + 1] = step + 1; dfs(step + 1); a[i][j] = a[i + 1][j] = a[i + 2][j] = a[i + 1][j + 1] = 1; } if (a[i][j + 1] == 1 && a[i + 1][j + 1] == 1 && a[i + 2][j + 1] == 1 && a[i + 1][j] == 1) { a[i][j + 1] = a[i + 1][j + 1] = a[i + 2][j + 1] = a[i + 1][j] = step + 1; dfs(step + 1); a[i][j + 1] = a[i + 1][j + 1] = a[i + 2][j + 1] = a[i + 1][j] = 1; } } } } else if (step == 3) { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { if (i + 1 <= n && j + 2 <= n) { if (a[i][j] == 1 && a[i][j + 1] == 1 && a[i][j + 2] == 1 && a[i + 1][j + 2] == 1) { a[i][j] = a[i][j + 1] = a[i][j + 2] = a[i + 1][j + 2] = step + 1; dfs(step + 1); a[i][j] = a[i][j + 1] = a[i][j + 2] = a[i + 1][j + 2] = 1; } if (a[i + 1][j] == 1 && a[i + 1][j + 1] == 1 && a[i + 1][j + 2] == 1 && a[i][j + 2] == 1) { a[i + 1][j] = a[i + 1][j + 1] = a[i + 1][j + 2] = a[i][j + 2] = step + 1; dfs(step + 1); a[i + 1][j] = a[i + 1][j + 1] = a[i + 1][j + 2] = a[i][j + 2] = 1; } } if (i + 2 <= n && j + 1 <= n) { if (a[i][j] == 1 && a[i + 1][j] == 1 && a[i + 2][j] == 1 && a[i + 2][j + 1] == 1) { a[i][j] = a[i + 1][j] = a[i + 2][j] = a[i + 2][j + 1] = step + 1; dfs(step + 1); a[i][j] = a[i + 1][j] = a[i + 2][j] = a[i + 2][j + 1] = 1; } if (a[i][j + 1] == 1 && a[i + 1][j + 1] == 1 && a[i + 2][j + 1] == 1 && a[i + 2][j] == 1) { a[i][j + 1] = a[i + 1][j + 1] = a[i + 2][j + 1] = a[i + 2][j] = step + 1; dfs(step + 1); a[i][j + 1] = a[i + 1][j + 1] = a[i + 2][j + 1] = a[i + 2][j] = 1; } } } } else if (step == 4) { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { if (i + 1 <= n && j + 2 <= n) { if (a[i + 1][j] == 1 && a[i][j + 1] == 1 && a[i][j + 2] == 1 && a[i + 1][j + 1] == 1) { a[i + 1][j] = a[i][j + 1] = a[i][j + 2] = a[i + 1][j + 1] = step + 1; dfs(step + 1); a[i + 1][j] = a[i][j + 1] = a[i][j + 2] = a[i + 1][j + 1] = 1; } } if (i + 2 <= n && j + 1 <= n) { if (a[i][j] == 1 && a[i + 1][j] == 1 && a[i + 2][j + 1] == 1 && a[i + 1][j + 1] == 1) { a[i][j] = a[i + 1][j] = a[i + 2][j + 1] = a[i + 1][j + 1] = step + 1; dfs(step + 1); a[i][j] = a[i + 1][j] = a[i + 2][j + 1] = a[i + 1][j + 1] = 1; } } } } else if (step == 5) { f = 1; return; } } static void solve(Scanner scanner) { n = scanner.nextInt(); f = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) a[i][j] = scanner.nextInt(); } dfs(1); if (f != 0) System.out.println("Yes"); else System.out.println("No"); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int T = scanner.nextInt(); while (T-- > 0) solve(scanner); } } ```
查看全文
0 0 1 9