棋盘覆盖问题
来源:互联网 发布:php files 编辑:程序博客网 时间:2024/06/05 00:48
#include <bits/stdc++.h>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<<len) || py > (1<<len) || px <= 0 || py <= 0) { cout << "输入不合法!" << endl; return 0; } ans = 0; memset(graph, 0, sizeof(graph)); graph[px][py] = 1; dfs(1, 1, 1<<len);//以左上角的坐标以及边长来表示一个正方形,注意边长在计算时要-1 cout << ans << endl; return 0;}
1 0
- 棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- ChessBoard棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- 《ChessboardCoverage_棋盘覆盖问题》
- 棋盘覆盖问题
- 棋盘覆盖问题
- 棋盘覆盖问题
- linux命令
- 学习hector_slam随手记录(四)
- ARM进阶 002_1 ADS工程配置
- Spring与Struts整合
- java 技术:消息队列
- 棋盘覆盖问题
- 两种盒模型
- 实现带括号加减乘除运算
- nginx简介
- 区域内点的个数
- LDA-线性判别分析
- C++排序之数组,Vector,priority_queue
- WebView出现net::err_cache_miss错误
- 《ACM程序设计》书中题目Y