棋牌覆盖问题
来源:互联网 发布:没有充电器 给mac充电 编辑:程序博客网 时间:2024/06/02 22:05
用分治的策略可以设计棋牌覆盖问题的一个简捷的解法。
当 K>0 时,将2^k X2^k 棋牌分割为4个小的棋牌, 特殊方法必位于4个较小的棋牌之一。内容来自算法设计———王晓东那本书上的思想。。。。
#include<cstdio>#include<cstdlib>#include<iostream>#include<algorithm>#include<vector>#include<cstring>using namespace std;#define MAX 1000int Board[MAX][MAX];int title;void ChessBoard(int tr, int tc, int dr, int dc, int size){ if(size==1)return; int t = title++; int s = size/2; if(dr<tr+s && dc<tc+s) ChessBoard(tr, tc, dr, dc, s); else { 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 { 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 { 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 { Board[tr+s][tc+s] = t; ChessBoard(tr+s, tc+s, tr+s, tc+s, s); }}int main(){ int k, m, n; while(cin>>k) { title =1; cin>>m>>n; memset(Board, 0, sizeof(Board)); Board[m][n]=-1; ChessBoard(0, 0, m, n, k); for(int i=0; i<k; i++) { for(int j=0; j<k; j++) cout<<Board[i][j]<<' '; cout<<endl; } } system("pause"); return 0;}
- 棋牌覆盖问题
- 网狐棋牌数据库配置问题
- 网狐棋牌框架-CopyMemory问题
- 网狐棋牌框架-WHDataQueue队列的问题
- select元素覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- window.onload覆盖问题!
- 棋盘覆盖问题
- 棋盘覆盖问题
- 瓷砖覆盖地板问题
- 棋盘覆盖问题
- 派生 名字覆盖问题
- 瓷砖覆盖问题
- memcpy的覆盖问题
- window.onload覆盖问题!
- 棋盘覆盖问题
- 棋盘覆盖问题
- MTD坏块管理(二)-内核获取Nandflash的参数过程
- 第二周实验报告十进制转换二进制
- C++常见排序方法实现
- vc中操作Xml--使用CMarkup类 - VC使用MSXML解析XML文档
- Catalan数
- 棋牌覆盖问题
- 代理模式
- C++ 多态性的浅析
- 1的个数
- jasonsoft@live.com
- Linux内核调度策略与算法分析 (1)
- js时间加减与时间对象与字符串之间的转换
- 常用HTML标签美化博文
- Linux内核调度策略与算法分析 (2)