蓝桥杯真题:玩具蛇(Java)

题目

小蓝有一条玩具蛇,一共有 1616 节,上面标着数字 11 至 1616。每一节都是一个正方形的形状。相邻的两节可以成直线或者成 9090 度角。

小蓝还有一个 4 × 44×4 的方格盒子,用于存放玩具蛇,盒子的方格上依次标着字母 AA 到 PP 共 1616 个字母。

小蓝可以折叠自己的玩具蛇放到盒子里面。他发现,有很多种方案可以将玩具蛇放进去。

下图给出了两种方案:
在这里插入图片描述
请帮小蓝计算一下,总共有多少种不同的方案。如果两个方案中,存在玩具蛇的某一节放在了盒子的不同格子里,则认为是不同的方案。

思路

dfs暴力搜,枚举每一个位置为开头

代码

import java.util.*;
public class Main {
    
    
    // (x,y)
    static int[][] upDownLeftRight = {
    
    {
    
    -1,0},{
    
    1,0},{
    
    0,-1},{
    
    0,1}};
    static int count = 0;
    public static void dfs(int[][] arr, int x, int y, int num) {
    
    
        if (num == 15) {
    
    
            count++;
            return;
        }
        for (int i = 0; i < 4; i++) {
    
    
            int newX = x + upDownLeftRight[i][0];
            int newY = y + upDownLeftRight[i][1];

            if (newX < 0 || newX >= 4 || newY < 0 || newY >= 4 || arr[newX][newY] == 1) {
    
    
                continue;
            }
            arr[newX][newY] = 1;
            dfs(arr, newX, newY, num+1);
            arr[newX][newY] = 0;
        }
    }
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        int[][] arr = new int[4][4];
        for (int i = 0; i < 4; i++) {
    
    
            for (int j = 0; j < 4; j++) {
    
    
                // 起点也要标记
                arr[i][j] = 1;
                dfs(arr, i, j,0);
                arr[i][j] = 0;
            }
        }
        System.out.println(count);
    }
}

运行结果

552

猜你喜欢

转载自blog.csdn.net/weixin_53946852/article/details/124911168