思路:由于是正方形,那么从中心进行dfs,找出每个地方对称的位置,最后结果除以4,考虑旋转和翻折。
#include <iostream>
#include <stdio.h>
using namespace std;
const int N = 6;
int ans = 0;
int mpt[N+1][N+1];
int dir[4][2] = {0,1,1,0,0,-1,-1,0};
void dfs(int x,int y)
{
if(x == 0 || y == 0 || x == N || y == N){
ans ++;
return;
}
for(int i = 0 ; i < 4 ; i ++)
{
int tx = x + dir[i][0];
int ty = y + dir[i][1];
if(mpt[tx][ty])continue;//如果这个地方不能走。。。。。。跳过
mpt[tx][ty] = 1;
mpt[N-tx][N-ty] = 1;//对称原因,即(0,0)和(5,5)是对称的
dfs(tx,ty);
mpt[tx][ty] = 0;
mpt[N-tx][N-ty] = 0;
}
}
int main()
{
mpt[N/2][N/2] = 1;
dfs(N/2,N/2);
printf("%d\n",ans/4);
return 0;
}