//裁剪问题
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
int visit[7][7];//标记有无访问过该点
int ans=0;//记录点的个数
int direction[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
//对应左右下上
void dfs(int x,int y)
{
//裁剪到边界就停止
if(x==0||y==0||x==6||y==6)
{
ans++;
return;
}
//如何裁剪
//1、记录某个点是否走过
visit[x][y]=1;
visit[6-x][6-y]=1;//朝反方向走记录
for(int i=0;i<4;i++)
{//左右x变,y不变
int nx=x+direction[i][0];
int ny=y+direction[i][1];
if(nx>-1&&nx<7&&ny>-1&&ny<7&&visit[nx][ny]==0)//当前访问到的点为0,即未访问过
{
dfs(nx,ny);
}
}
//刷新
visit[x][y]=0;
visit[6-x][6-y]=0;
}
int main()
{
dfs(3,3);
cout<<ans/4<<endl;
return 0;
}
题目补充:需要排除旋转后的情况