返回题解分享
讨论 / 题解分享/ 帖子详情

LITS 游戏(编程题) - 题解

视频中标准程序代码如下:

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 喜欢 8 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!