首页 > 代码库 > 棋盘覆盖问题
棋盘覆盖问题
#include<iostream> #include<iterator> #include<algorithm> using namespace std; /* *棋盘覆盖问题 */ static int t=0; void ChessBoard(int **map,int r,int l,int pr,int pl,int size) { if(1==size) {return;} t++; int it = t; //左上角 if(pr<r+size/2&&pl<l+size/2) ChessBoard(map,r,l,pr,pl,size/2); else { map[r+size/2-1][l+size/2-1]=it; ChessBoard(map,r,l,r+size/2-1,l+size/2-1,size/2); } //右上角 if(pr<r+size/2&&pl>=l+size/2) ChessBoard(map,r,l+size/2,pr,pl,size/2); else { map[r+size/2-1][l+size/2]=it; ChessBoard(map,r,l+size/2,r+size/2-1,l+size/2,size/2); } //左下角 if(pr>=r+size/2&&pl<l+size/2) ChessBoard(map,r+size/2,l,pr,pl,size/2); else { map[r+size/2][l+size/2-1]=it; ChessBoard(map,r+size/2,l,r+size/2,l+size/2-1,size/2); } //右下角 if(pr>=r+size/2&&pl>=l+size/2) ChessBoard(map,r+size/2,l+size/2,pr,pl,size/2); else { map[r+size/2][l+size/2]=it; ChessBoard(map,r+size/2,l+size/2,r+size/2,l+size/2,size/2); } } int main() { int k=1,s;//棋盘的大小 int r,l;//残缺方格的位置 cin>>s; k<<=s; cin>>r>>l; int ** map = new int*[k]; for (int i = 0; i < k; i++) { map[i] = new int[k]; } map[r][l] = 0; //运算 ChessBoard(map,0,0,r,l,k); //输出结果 for (int i = 0; i < k; i++) { copy(map[i],map[i]+k,ostream_iterator<int>(cout," ")); cout<<endl; } }
棋盘覆盖问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。