P1790 矩形分割

题目

题目

思路

额,其实仔细研究就会发现只要确定了分割的方法(分割线)那么结果就已经确定了,那么我们要枚举起点,而且只需要枚举2条边,当然,这是因为从另一边开始搜索显然一定是与前2边重复的。
使用此方法可ACP4537
code:

#include<cstring>
#include<iostream>
#include<cmath>
#include<queue>
#include<algorithm>
using namespace std;
int n,m,q[4][2]={
    
    {
    
    0,1},{
    
    1,0},{
    
    -1,0},{
    
    0,-1}},s;
bool a[10][10];
void dfs(int x,int y)
{
    
    
	a[x][y]=1;
	if (x==0||y==0||x==n||y==m)
	{
    
    
		s++;
		a[x][y]=0;
		return;
	}
	for (int i=0;i<4;i++)
	{
    
    
		int dx=x+q[i][0],dy=y+q[i][1];
		if (dx>=0&&dy>=0&&dx<=n&&dy<=m&&!a[dx][dy]) dfs(dx,dy);
	}
	a[x][y]=0;
	return;
}
int main()
{
    
    
	cin>>n>>m;
	for (int i=1;i<n;i++)
	{
    
    
		a[i][0]=1;
		dfs(i,1);
		a[i][0]=0;
	}
	for (int i=1;i<m;i++)
	{
    
    
		a[0][i]=1;
		dfs(1,i);
		a[0][i]=0;
	}
	cout<<s;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_49843717/article/details/113815713