#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int a[100][100];
int vis[100][100];
int cnt;
void solve(int bx,int by,int n,int dx,int dy)
{
if(n==1)
{
return ;
}
else
{
int t=++cnt;
int Size=n/2;
if(dx<(bx+Size)&&dy<(by+Size))
{
solve(bx,by,Size,dx,dy);
}
else
{
vis[bx+Size-1][by+Size-1]=t;
solve(bx,by,Size,bx+Size-1,by+Size-1);
}
if(dy>=(by+Size)&&dx<(bx+Size))
{
solve(bx,by+Size,Size,dx,dy);
}
else
{
vis[bx+Size-1][by+Size]=t;
solve(bx,by+Size,Size,bx+Size-1,by+Size);
}
if(dx>=(bx+Size)&&dy<(by+Size))
{
solve(bx+Size,by,Size,dx,dy);
}
else
{
vis[bx+Size][by+Size-1]=t;
solve(bx+Size,by,Size,bx+Size,by+Size-1);
}
if(dx>=(bx+Size)&&dy>=(by+Size))
{
solve(bx+Size,by+Size,Size,dx,dy);
}
else
{
vis[bx+Size][by+Size]=t;
solve(bx+Size,by+Size,Size,bx+Size,by+Size);
}
}
}
int main()
{
int n,dx,dy;
while(cin>>n)
{
cin>>dx>>dy;
memset(vis,0,sizeof(vis));
cnt=0;
solve(1,1,n,dx,dy);
for(int i=1; i<=n; ++i)
{
for(int j=1; j<=n; ++j)
{
cout<<vis[i][j]<<" ";
}
cout<<endl;
}
}
}
分治递归 棋盘问题
最新推荐文章于 2020-09-10 08:29:13 发布