当前位置:   article > 正文

玩具蛇(蓝桥杯)

玩具蛇(蓝桥杯)

玩具蛇

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

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

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

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

下图给出了两种方案:
在这里插入图片描述

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

答案:552

dfs

#include<bits/stdc++.h> // 包含STL库文件
using namespace std;

const int N=4; // 定义常量 N,表示 4x4 的方格大小
int g[N][N]; // 定义二维数组 g,用于表示方格的状态
int ans=0; // 定义变量 ans,用于累计所有可能的放置方案
// 定义移动方向数组 dir_x 和 dir_y,分别表示上、下、左、右的 x 和 y 方向移动
int dir_x[4]={-1,1,0,0};
int dir_y[4]={0,0,-1,1};

// 检查坐标 (x, y) 是否在方格内以及位置是否未被占用
bool check(int x,int y)
{
	if(x>=0 && x<N && y>=0 && y<N && g[x][y]==0)
		return true;
	return false;
}

// 深度优先搜索函数 dfs,用于尝试放置玩具蛇
void dfs(int x,int y,int step)
{
	if(step==16) // 如果已放置 16 节玩具蛇,说明找到一种方案
	{
		ans++; // 方案数增加
		return;
	}
	for(int i=0;i<4;i++) // 遍历所有可能的四个方向
	{
		int tox=x+dir_x[i]; // 计算下一个 x 坐标
		int toy=y+dir_y[i]; // 计算下一个 y 坐标
		if(check(tox,toy)) // 检查下一个位置是否有效
		{
			g[tox][toy]=1; // 将位置标记为已占用
			dfs(tox,toy,step+1); // 递归继续放置下一节
			g[tox][toy]=0; // 回溯,将位置重置为未占用
		}
	}
}

int main()
{
	// 循环尝试每个格子作为起始位置
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<N;j++)
		{
			g[i][j]=1; // 将当前位置标记为已占用
			dfs(i,j,1); // 从当前位置开始深度优先搜索
			g[i][j]=0; // 回溯,将位置重置为未占用
		}
	}
	cout<<ans; // 输出所有可能的放置方案的数量
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

在这段代码中,定义了一个 4x4 的方格来模拟题目中的盒子,然后使用深度优先搜索(DFS)算法尝试每种可能的玩具蛇的放置方式。每次我们在方格中放置一节玩具蛇时,会递增步数 step。当 step 达到 16 时,意味着所有的玩具蛇部分都已放置在方格中,这时就找到了一种有效的放置方案,方案数 ans 就增加。整个搜索过程会遍历所有的格子作为起始点,并递归地搜索所有可能的路径,直到找到所有可能的放置方案。最后,输出 ans 得到总共有多少不同的放置方案。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/330006
推荐阅读
相关标签
  

闽ICP备14008679号