第八章部分习题循环日程表

it2024-12-11  17

 

陷入思维定式里面了..以为总是在递归基里面解决问题

 

#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int maxn=10000; int board[maxn][maxn]; int k; void copy(int sx1,int sx2,int sy1,int sy2,int dx1,int dx2,int dy1,int dy2,int m) { int len=sx2-sx1+1; for(int i=0;i<len;i++) for(int j=0;j<len;j++) board[dx1+i][dy1+j]=m+board[sx1+i][sy1+j]; } //左闭右闭区间 void solve(int x1,int x2,int y1,int y2,int k) { if(x2==x1) { board[x1][y1]=1; return; } int mx=x1+(x2-x1)/2; int my=y1+(y2-y1)/2; int m=1<<(k-1); solve(x1,mx,y1,my,--k); copy(x1,mx,y1,my,mx+1,x2,my+1,y2,0); copy(x1,mx,y1,my,mx+1,x2,y1,my,m); copy(x1,mx,y1,my,x1,mx,my+1,y2,m); } void print_board() { for(int i=0;i<(1<<k);i++) { for(int j=0;j<(1<<k);j++) printf("%3d ",board[i][j]); printf("\n"); } } int main() { memset(board,0,sizeof(board)); cin>>k; solve(0,(1<<k)-1,0,(1<<k)-1,k); print_board(); return 0; }

 

转载于:https://www.cnblogs.com/tclan126/p/7499488.html

最新回复(0)