【问题描述】
小蓝有一条玩具蛇,一共有 16 节,上面标着数字 1 至 16。每一节都是一个正方形的形状。相邻的两节可以成直线或者成 90 度角。
小蓝还有一个 4 × 4 的方格盒子,用于存放玩具蛇,盒子的方格上依次标着字母 A 到 P 共 16 个字母。
小蓝可以折叠自己的玩具蛇放到盒子里面。他发现,有很多种方案可以将玩具蛇放进去。
下图给出了两种方案:
答案:552
#include<bits/stdc++.h>
using namespace std;
bool vis[10][10];
int ans;
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
void dfs(int x,int y,int cnt){
if(cnt==16){
ans++;
return;
}
for(int i=0;i<4;i++){
int a=x+dx[i],b=y+dy[i];
if(a>=1&&a<=4&&b>=1&&b<=4&&!vis[a][b]){
vis[a][b]=true;
dfs(a,b,cnt+1);
vis[a][b]=false;
}
}
}
int main()
{
for (int i = 1; i <= 4; i++){
for (int j = 1; j <= 4; j++){
vis[i][j]=true;//注意初始化
dfs(i,j,1);
vis[i][j]=false;
}
}
cout << ans;
return 0;
}