棋盘覆盖问题

网友投稿 281 2022-11-27

棋盘覆盖问题

#include using namespace std;const int maxn = 2000;int graph[maxn][maxn];int ans;int px, py;//棋盘大小以及黑块的位置void dfs(int x, int y, int len) { if(len == 2) { ans++; return; } ans++;//每次递归都会有三个角模拟成黑色凑出一个L,所以直接把结果+1 len /= 2; //把棋盘划分为4个子块,分别递归求解 //左上 if (x <= px && px <= x + len - 1 && y <= py && py <= y + len - 1) {//子块中有黑块 dfs(x, y, len); } else { graph[x + len - 1][y + len - 1] = 1;//模拟黑块 dfs(x, y, len); } //左下 if (x + len <= px && px <= x + len*2 - 1 && y <= py && py <= y + len - 1) {//子块中有黑块 dfs(x + len, y, len); } else { graph[x + len*2 - 1][y + len - 1] = 1; dfs(x + len, y, len); } //右上 if (x <= px && px <= x + len - 1 && y + len <= py && py <= y + len*2 - 1) {//子块中有黑块 dfs(x, y + len, len); } else { graph[x + len - 1][y + len*2 - 1] = 1; dfs(x, y + len, len); } //右下 if (x + len <= px && px <= x + len*2 - 1 && y + len <= py && py <= y + len*2 - 1) {//子块中有黑块 dfs(x + len, y + len, len); } else { graph[x + len*2 - 1][y + len*2 - 1] = 1; dfs(x + len, y + len, len); }}int main(){ int len; cout << "请输入棋盘边长(别超过2^10): 2^"; cin >> len; if (len >10) { cout << "边长太大!" << endl; return 0; } cout << "2^" << len << "*2^" << len << "的棋盘已经创建" << endl; cout << "请输入特殊位置的坐标(原点为1,1):"; cin >> px >> py; if( px > (1< (1<

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用Spring RestTemplate 详解实践使用及拓展增强
下一篇:微雪电子USB转RS232/RS485/UART串口模块简介
相关文章

 发表评论

暂时没有评论,来抢沙发吧~