棋盘问题(分治)
来源:互联网 发布:手机抢号软件 编辑:程序博客网 时间:2024/05/16 08:13
//棋盘覆盖问题 /* (tr,tc)是棋盘左上角的方格坐标 (dr,dc)是特殊方格所在的坐标 size是棋盘的行数和列数 */ #include<iostream> using namespace std; int board[1025][1025]; static int tile = 1; void ChessBoard(int tr,int tc,int dr,int dc,int size) { if(size==1) return ;//递归边界 int t=tile++;//L型骨牌号 int s=size/2;//分割棋盘 //覆盖左上角子棋盘 if(dr<tr+s && dc<tc+s) ChessBoard(tr,tc,dr,dc,s);//特殊方格在此棋盘中 else //此棋盘中无特殊方格,用t号L型骨牌覆盖右下角 { board[tr+s-1][tc+s-1]=t; //覆盖其余方格 ChessBoard(tr,tc,tr+s-1,tc+s-1,s); } //覆盖右上角子棋盘 if(dr<tr+s && dc>=tc+s) ChessBoard(tr,tc+s,dr,dc,s);//特殊方格在此棋盘中 else //此棋盘中无特殊方格,用t号L型骨牌覆盖左下角 { board[tr+s-1][tc+s]=t; //覆盖其余方格 ChessBoard(tr,tc+s,tr+s-1,tc+s,s); } //覆盖左下角子棋盘 if(dr>=tr+s && dc<tc+s)//特殊方格在此棋盘中 ChessBoard(tr+s,tc,dr,dc,s); else //此棋盘中无特殊方格,用t号L型骨牌覆盖右上角 { board[tr+s][tc+s-1]=t; //覆盖其余方格 ChessBoard(tr+s,tc,tr+s,tc+s-1,s); } //覆盖右下角子棋盘 if(dr>=tr+s && dc>=tc+s)//特殊方格在此棋盘中 ChessBoard(tr+s,tc+s,dr,dc,s); else //此棋盘中无特殊方格,用t号L型骨牌覆盖左上角 { board[tr+s][tc+s]=t; //覆盖其余方格 ChessBoard(tr+s,tc+s,tr+s,tc+s,s); } } int main() { int i,j; int k; while(cin>>k) { int size = 1<<k; int x,y; cin>>x>>y; board[x][y]=0; ChessBoard(0, 0, x, y, size); for(i=0; i<size; i++) { for(j = 0; j < size; j++) cout<< board[i][j]<<"\t"; cout<<"\n"; } } return 0; }
阅读全文
0 0
- 棋盘问题(分治)
- 棋盘覆盖问题 (分治)
- 棋盘覆盖问题(分治)
- 棋盘覆盖问题(递归与分治)
- 棋盘覆盖问题(分治策略)
- 棋盘覆盖问题【分治】
- 分治-棋盘覆盖问题
- 棋盘覆盖问题(分治)
- 分治递归 棋盘问题
- 棋盘覆盖问题 分治
- 分治法-棋盘覆盖问题
- 分治法:棋盘覆盖问题
- 棋盘覆盖问题 (分治法)
- 典型分治问题 棋盘覆盖
- 棋盘覆盖问题 - 分治法
- 棋盘覆盖问题-递归分治
- 棋盘覆盖问题 分治法
- [分治,递归]棋盘覆盖问题
- 高斯消元法解线性方程--Java实现
- 2017第十七届中国(北京)国际食品及高端饮品展览会 会刊(参展商名录)
- 排序算法专项总结
- Ubuntu安装QIIME2-2017.8版本
- iOS绘图教程
- 棋盘问题(分治)
- Java 源码分析(三)
- visibility和display
- 【LeetCode】Permutation II(带重复元素的排列)
- Hibernate 第一个hibernate程序
- POJ总结(3094)
- 【bzoj3231】[Sdoi2008]递归数列(矩乘)
- Hibernate 配置详解
- Power Calculus UVA