#include<iostream>
#include<algorithm>
using namespace std;
const int N=6;
bool inq[7][7]={false};
int sum=0;
int X[4]={0,1,0,-1};
int Y[4]={1,0,-1,0};//四个方向
void dfs(int x,int y)
{
if(x>=6||x<=0||y>=6||y<=0) {//dfs得不到结果,先观察边界,边界容易出问题 ,等于号遗漏
sum++;
return ;
}
for(int i=0;i<4;i++)
{
int newx=x+X[i];
int newy=y+Y[i];
if(inq[newx][newy]==false)
{
inq[newx][newy]=true;
// inq[3-X[i]][3-Y[i]]=true;//若采用中心点减去增量的解法,结果为80037,正确结果为509
inq[N-newx][N-newy]=true;//N=6, 结果509
dfs(newx,newy);
inq[newx][newy]=false;
// inq[3-X[i]][3-Y[i]]=false;
inq[N-newx][N-newy]=false;
}
}
}
int main()
{
inq[3][3]=true;//不要忘了将中心设为true,否则将得到错误的结果
dfs(3,3);
cout<<sum/4<<endl;//四种对称的情况
return 0;
}
蓝桥杯——2017届 方格分割
最新推荐文章于 2022-03-17 19:07:46 发布