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

Posted 爱敲代码的三毛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯真题:玩具蛇(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

以上是关于蓝桥杯真题:玩具蛇(Java)的主要内容,如果未能解决你的问题,请参考以下文章

第十一届蓝桥杯(国赛)——玩具蛇

蓝桥杯省赛真题23Scratch贪吃蛇 少儿编程scratch蓝桥杯省赛真题讲解

蓝桥杯国赛真题9Scratch贪吃蛇 少儿编程scratch蓝桥杯国赛真题讲解

蓝桥杯真题练习

Java--蓝桥杯真题

蓝桥云课刷题210523