大佬求助14分。
查看原帖
大佬求助14分。
540066
zwb3_1415926楼主2023/8/24 21:19
#include<bits/stdc++.h>
//#include<windows.h>
using namespace std;
int k,zx,zy;
bool vis[1025][1025],cnt;
bool fin(int bx,int ex,int by,int ey)
{
	int pd=0;
	for (int i=bx;i<=ex;i++)
		for (int j=by;j<=ey;j++) if (vis[i][j]) pd++;
	if (pd==0) return false;
	else return true;
}
void dfs(int bx,int ex,int by,int ey)
{
//	for (int i=1;i<=1<<k;i++)
//	{
//		for (int j=1;j<=1<<k;j++)
//		{ 
//			if(vis[i][j]==true) cout<<1<<" ";
//			else cout<<0<<" ";
//		}
//		cout<<endl;
//	}
//	cout<<bx<<" "<<ex<<" "<<by<<" "<<ey<<endl;
//	cout<<endl<<endl;
//	Sleep(200);
	if (bx+1==ex&&by+1==ey)
	{
		int pd=0;
		for (int i=bx;i<=ex;i++)
			for (int j=by;j<=ey;j++) if (vis[i][j]) pd++;
		//cout<<pd<<endl;
		if (pd==4) return ;
		if (pd==0) return ;
		if ((bx==zx||ex==zx)&&(by==zy||ey==zy))
		{
			if (bx==zx&&by==zy) cout<<ex<<" "<<ey<<" "<<1<<endl;
			if (bx==zx&&ey==zy) cout<<ex<<" "<<by<<" "<<2<<endl;
			if (ex==zx&&by==zy) cout<<bx<<" "<<ey<<" "<<3<<endl;
			if (ex==zx&&ey==zy) cout<<ex<<" "<<by<<" "<<4<<endl;
			for (int i=bx;i<=ex;i++)
				for (int j=by;j<=ey;j++) vis[i][j]=true;
			return;
		}
		if (vis[bx][by]) 
		{
			for (int i=bx;i<=ex;i++)
				for (int j=by;j<=ey;j++) vis[i][j]=true;
			cout<<ex<<" "<<ey<<" "<<1<<endl;
			return;
		}
		if (vis[bx][ey])
		{
			for (int i=bx;i<=ex;i++)
				for (int j=by;j<=ey;j++) vis[i][j]=true;
			cout<<ex<<" "<<by<<" "<<2<<endl;
			return;
		}
		if (vis[ex][by]) 
		{
			for (int i=bx;i<=ex;i++)
				for (int j=by;j<=ey;j++) vis[i][j]=true;
			cout<<bx<<" "<<ey<<" "<<3<<endl;
			return;
		}
		if (vis[ex][ey])
		{
			for (int i=bx;i<=ex;i++)
				for (int j=by;j<=ey;j++) vis[i][j]=true;
			cout<<ex<<" "<<by<<" "<<4<<endl;
			return;
		}
		return ;
	}
	dfs(bx,(bx+ex)/2,by,(by+ey)/2);
	if (fin(bx,(bx+ex)/2,by,(by+ey)/2)&&!vis[(bx+ex)/2+1][(by+ey)/2+1])
	{
		cout<<(bx+ex)/2+1<<" "<<(by+ey)/2+1<<" "<<1<<endl;
		vis[(bx+ex)/2+1][(by+ey)/2]=true;vis[(bx+ex)/2][(by+ey)/2+1]=true;vis[(bx+ex)/2+1][(by+ey)/2+1]=true;
		dfs((bx+ex)/2+1,ex,by,(by+ey)/2);//左上 
		dfs(bx,(bx+ex)/2,(by+ey)/2+1,ey);
		dfs((bx+ex)/2+1,ex,(by+ey)/2+1,ey);
	}
	dfs(bx,(bx+ex)/2,(by+ey)/2+1,ey);
	if (fin(bx,(bx+ex)/2,(by+ey)/2+1,ey)&&!vis[(bx+ex)/2+1][(by+ey)/2])
	{
		cout<<(bx+ex)/2+1<<" "<<(by+ey)/2<<" "<<2<<endl;
		vis[(bx+ex)/2+1][(by+ey)/2+1]=true;vis[(bx+ex)/2][(by+ey)/2]=true;vis[(bx+ex)/2+1][(by+ey)/2]=true;
		dfs(bx,(bx+ex)/2,by,(by+ey)/2);//左上 
		dfs((bx+ex)/2+1,ex,by,(by+ey)/2);//左下 
		dfs((bx+ex)/2+1,ex,(by+ey)/2+1,ey);//右下 
	}
	dfs((bx+ex)/2+1,ex,by,(by+ey)/2);
	if (fin((bx+ex)/2+1,ex,by,(by+ey)/2)&&!vis[(bx+ex)/2][(by+ey)/2+1])
	{
		cout<<(bx+ex)/2<<" "<<(by+ey)/2+1<<" "<<3<<endl;
		vis[(bx+ex)/2][(by+ey)/2]=true;vis[(bx+ex)/2][(by+ey)/2+1]=true;vis[(bx+ex)/2+1][(by+ey)/2+1]=true;
		dfs(bx,(bx+ex)/2,by,(by+ey)/2);//左上 
		dfs(bx,(bx+ex)/2,(by+ey)/2+1,ey);//右上 
		dfs((bx+ex)/2+1,ex,(by+ey)/2+1,ey);//右下 
	}
	dfs((bx+ex)/2+1,ex,(by+ey)/2+1,ey);
	if (fin((bx+ex)/2+1,ex,(by+ey)/2+1,ey)&&!vis[(bx+ex)/2][(by+ey)/2])
	{
		cout<<(bx+ex)/2<<" "<<(by+ey)/2<<" "<<4<<endl;
		vis[(bx+ex)/2][(by+ey)/2]=true;vis[(bx+ex)/2][(by+ey)/2+1]=true;vis[(bx+ex)/2+1][(by+ey)/2]=true;
		dfs((bx+ex)/2+1,ex,by,(by+ey)/2);
		dfs(bx,(bx+ex)/2,(by+ey)/2+1,ey);
		dfs(bx,(bx+ex)/2,by,(by+ey)/2);//左上 
	}
	return;
}
int main()
{
	cin>>k>>zx>>zy;
	vis[zx][zy]=true;
	dfs(1,1<<k,1,1<<k);
}
2023/8/24 21:19
加载中...