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

相关文章:

  • 2021-06-19
  • 2022-12-23
  • 2022-01-19
  • 2021-04-01
  • 2022-12-23
  • 2021-04-08
  • 2022-01-10
猜你喜欢
  • 2021-08-09
  • 2021-05-09
  • 2022-12-23
  • 2021-11-30
  • 2022-12-23
相关资源
相似解决方案