question
analysis
start the deep search from the center
code
#include<iostream>
using namespace std;
#define N 6
int direction[4][2] = {
{-1,0 },//左
{1 ,0 },//右
{0 ,-1},//下
{0 ,1 } //上
};
int flag[7][7] = {0};
int ans = 0;
void dfs(int x,int y){
if( x==0 || x==N || y==0 || y==N){
ans++;
return;
}
for(int i = 0; i < 4; i++){
int dx = x + direction[i][0];
int dy = y + direction[i][1];
if(dx>=0 && dx<=N && dy>=0 && dy<=N && !flag[dx][dy]){
flag[dx][dy] = 1;
flag[N-dx][N-dy] = 1;//对称点也标记为1
dfs(dx,dy);
flag[dx][dy] = 0;//一种情况探索完后重置
flag[N-dx][N-dy] = 0;
}
}
}
int main(){
flag[N/2][N/2]=1;//N = 6
dfs(N/2, N/2);//3,3
cout << ans / 4 <<endl;
return 0;
}
answer
509