14分求助
查看原帖
14分求助
398152
MinimumSpanningTree最小生成树楼主2023/1/30 11:02
#include<iostream>
#include<cstdio>
using namespace std;
int k,x,y;
void fun(int dx,int dy,int x,int y,int n)
{
	if(n==1) return;
	n/=2;
	if(x-dx<n&&y-dy<n)
	{
		printf("%d %d 1\n",dx+n,dy+n);
		fun(dx,dy,x,y,n);
		fun(dx,dy+n,x+n-1,y+n,n);
		fun(dx+n,dy,x+n,y+n-1,n);
		fun(dx+n,dy+n,x+n,y+n,n);
	}
	else if(x-dx<n&&y-dy>=n)
	{
		printf("%d %d 2\n",dx+n,dy+n-1);
		fun(dx,dy+n,x,y,n);
		fun(dx,dy,x+n-1,y+n-1,n);
		fun(dx+n,dy,x+n,y+n-1,n);
		fun(dx+n,dy+n,x+n,y+n,n);
	}
	else if(x-dx>=n&&y-dy<n)
	{
		printf("%d %d 3\n",dx+n-1,dy+n);
		fun(dx+n,dy,x,y,n);
		fun(dx,dy,x+n-1,y+n-1,n);
		fun(dx,dy+n,x+n-1,y+n,n);
		fun(dx+n,dy+n,x+n,y+n,n);
	}
	//if(x-dx>=n&&y-dy>=n)
	else
	{
		printf("%d %d 4\n",dx+n-1,dy+n-1);
		fun(dx+n,dy+n,x,y,n);
		fun(dx,dy,x+n-1,y+n-1,n);
		fun(dx,dy+n,x+n-1,y+n,n);
		fun(dx+n,dy,x+n,y+n-1,n);
	}
}
int main()
{
	scanf("%d%d%d",&k,&x,&y);
	k=1<<k;
	//printf("%d",k);
	fun(1,1,x,y,k);
	return 0;
}
2023/1/30 11:02
加载中...