赦免战俘

P5741赦免战俘

根据题意有四种操作而且是重复操作便可以想到递归

递归语句

void dfs(int a,int b,int a1,int b1,int book)//a行数开始,b行数结束,a1列数开始,b1列数结束,book操作类型 

不同的四种操作

	
	dfs(a,(a+b)/2,a1,(a1+b1)/2,1);//操作左上角
	
	dfs(a,(a+b)/2,(a1+b1)/2+1,b1,2);//操作右上角 

	dfs((a+b)/2+1,b,a1,(a1+b1)/2,3);//操作左下角 
	dfs((a+b)/2+1,b,(a1+b1)/2+1,b1,4);//操作右下角

递归

1. 操作左上角时

if(book==1)
	{
		for(int i=a;i<=b;++i)
			for(int j=a1;j<=b1;++j)
				m[i][j]=1;
		return ;
	} 

2. 操作右上角时

if(book==2){
		for(int i=a;i<=b;++i)
			for(int j=a1;j<=b1;++j)
				m[i][j]=0;
		if(a==b && a1==b1)
			return ;
	}

3. 操作左下角时

if(book==3){
		for(int i=a;i<=b;++i)
			for(int j=a1;j<=b1;++j)
				m[i][j]=0;
		if(a==b && a1==b1)
			return ;
	}

4.操作右下角

if(book==4){
		for(int i=a;i<=b;++i)
			for(int j=a1;j<=b1;++j)
				m[i][j]=0;
		if(a==b && a1==b1)
			return ;
	}

其实可以发现后三个都有共同点

  • 当行数起始等于行数终止时且列数起始等于列数终止时 这部分就遍历完了

还有个2的n次方需要处理

完整的AC code

int s(int a)
{
	int shu=1;
	for(int i=1;i<=a;++i) shu*=2;
	return shu; 
}

#include<cstdio>
#include<iostream>

using namespace std;

int n;
int m[2050][2050];
void dfs(int a,int b,int a1,int b1,int book)//a行数开始,b行数结束,a1列数开始,b1列数结束,book操作类型 
{	
	if(book==1)
	{
		for(int i=a;i<=b;++i)
			for(int j=a1;j<=b1;++j)
				m[i][j]=1;
		return ;
	} 
	else if(book==2){
		for(int i=a;i<=b;++i)
			for(int j=a1;j<=b1;++j)
				m[i][j]=0;
		if(a==b && a1==b1)
			return ;
	}
	else if(book==3){
		for(int i=a;i<=b;++i)
			for(int j=a1;j<=b1;++j)
				m[i][j]=0;
		if(a==b && a1==b1)
			return ;
	}
	else if(book==4){
		for(int i=a;i<=b;++i)
			for(int j=a1;j<=b1;++j)
				m[i][j]=0;
		if(a==b && a1==b1)
			return ;
	}
		
		
	dfs(a,(a+b)/2,a1,(a1+b1)/2,1);//操作左上角
	
	dfs(a,(a+b)/2,(a1+b1)/2+1,b1,2);//操作右上角 

	dfs((a+b)/2+1,b,a1,(a1+b1)/2,3);//操作左下角 
	dfs((a+b)/2+1,b,(a1+b1)/2+1,b1,4);//操作右下角 
}
int s(int a)
{
	int shu=1;
	for(int i=1;i<=a;++i) shu*=2;
	return shu; 
}
int main()
{
//	freopen("1.out","w",stdout);
	cin>>n;
	int limit=s(n);
	dfs(1,limit,1,limit,0);

	for(int i=1;i<=limit;++i){
		for(int j=1;j<=limit;++j)
		if(m[i][j]==0) cout<<"1 ";
		else cout<<"0 ";
	
		cout<<endl;
	}
	return 0;
} 
posted @ 2021-01-31 17:24  归游  阅读(31)  评论(0编辑  收藏  举报