分治递归 棋盘问题

xiaoxiao2021-02-28  123

#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; } } }
转载请注明原文地址: https://www.6miu.com/read-34957.html

最新回复(0)