第八届蓝桥杯省赛 4方块分割

思路:
1、从中心点(注意不是中心方块)出发,进行深度优先搜索
2、一次深度搜索以到达边界为退出条件,每次到达边界都是一种分割曲线的形成
3、因为左右上下对称的性质,结果需要除以4

难点主要是要想到:
1、对分割线经过的点进行遍历,而不是对组成的方块进行遍历
2、要以中心为出发点进行遍历
3、要把结果除以4

#include <cstdio>
#include <iostream>
#include <string.h>
#include <iostream> 
using namespace std;
int ans = 0;
int sign[10][10];
int xd[4] = {0,1,0,-1};
int yd[4] = {1,0,-1,0};
void dfs(int a,int b){
	//如果已经到达边界,答案加一 
	if(a==0||a==6||b==0||b==6){
		ans += 1;
		return;
	}
	//如果还没有达到边界,深搜四种情况
	int i;
	for(i=0;i<4;i++){
		int nx = a+xd[i];
		int ny = b+yd[i];
		if(nx>=0&&nx<=6&&ny>=0&&ny<=6&&sign[nx][ny]==0){
			//标记
			sign[nx][ny] = 1;
			sign[6-nx][6-ny] = 1;
			dfs(nx,ny);
			sign[nx][ny] = 0;
			sign[6-nx][6-ny] = 0; 
		} 
	}
	
	 
} 


int main(){
	memset(sign,0,sizeof(int)*10*10);
	sign[3][3] = 1;
	dfs(3,3);
	cout<<ans/4<<endl;

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值