本文已参与「新人创作礼」活动,一起开启掘金创作之路。 [](玩具蛇 - 蓝桥云课 (lanqiao.cn))
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝有一条玩具蛇,一共有 1616 节,上面标着数字 11 至 1616。每一节都是一个正方形的形状。相邻的两节可以成直线或者成 9090 度角。
小蓝还有一个 4 × 44×4 的方格盒子,用于存放玩具蛇,盒子的方格上依次标着字母 AA 到 PP 共 1616 个字母。
小蓝可以折叠自己的玩具蛇放到盒子里面。他发现,有很多种方案可以将玩具蛇放进去。
下图给出了两种方案:
请帮小蓝计算一下,总共有多少种不同的方案。如果两个方案中,存在玩具蛇的某一节放在了盒子的不同格子里,则认为是不同的方案。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
多做些搜索题,递归题..
题意:4乘4的矩阵方格,玩具蛇填满这个矩阵,玩具蛇相邻位置只能水平或者垂直放置,问有多少种方式~
题解:广搜每一个位置为起点,判断玩具蛇的摆放位置
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
#define inf 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
int book[20][20];
int ans=0;
int f[4][2]= {1,0,0,1,-1,0,0,-1};///方向
bool check(int x,int y) {///界外判断
if(x<1||x>4||y<1||y>4)
return true;
return false;
}
void bfs(int x,int y,int cnt) {
if(check(x,y))
return;
if(cnt==16) {///递归出口
ans++;
return ;
}
for(int i=0; i<4; i++) {
int dx=x+f[i][0];
int dy=y+f[i][1];
if(book[dx][dy])
continue;
book[dx][dy]=1;
bfs(dx,dy,cnt+1);
book[dx][dy]=0;
}
}
int main() {
for(int i=1; i<=4; i++) {
for(int j=1; j<=4; j++) {///每个位置开始广搜
mem(book,0);
book[i][j]=1;
bfs(i,j,1);
}
}
cout<<ans<<endl;
return 0;
}