题解分享
题解分享简介
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



