棋盘覆盖算法
来源:互联网 发布:电脑拍照软件 编辑:程序博客网 时间:2024/05/17 21:55
题目介绍
在一个(2^k)*(2^k)个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为特殊方格。
所以有4^k的次方中不同的特殊棋盘。
在棋盘覆盖中我们有四种L型骨牌,要求是使用这些骨牌,覆盖完全棋盘上除特殊位置以外的所有位置,并且任何两个L型骨牌不得重叠覆盖。
在任何一个(2^k)*(2^k)的棋盘覆盖中,用到的L型骨牌个数恰为(4^k-1)/3。
思路如下:
采用分治的思想,假设是8*8矩阵
(1)先划分为4块,如果给出的特殊位置在第一个方块内,先给中心的四个结点中其余三块赋值
(2)对于第一块,进行递归查找,如果还可以继续分,则继续划分下去,直到划分到size=2,这时候就是四个结点,给其余三个结点赋值
(3)在以上递归过程中,任何一个被赋值的点可以看作是下一个特殊位置,从而从这个特殊位置出发然后就可以继续去覆盖棋盘
代码实现如下
#include <iostream>#include <iomanip>using namespace std;const int N = 8;typedef int Array[N][N];void Print_2Array(Array ar){ for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { cout << setw(3) << ar[i][j]; } cout << endl; } cout << endl;}int title = 0;void MyCheseBoard(Array ar, int tr, int tc, int dr, int dc, int size)// 8*8 0 0 1 1 8 { if (size <= 1) { return; } int t = ++title; int s = size / 2; if (dr < tr + s&&dc < tc + s)//在这个里面 { MyCheseBoard(ar, tr, tc, dr, dc, s); } else { ar[tr + s - 1][tc + s - 1] = t; MyCheseBoard(ar, tr, tc, tr + s - 1, tc + s - 1, s); } if (dr >= tr + s&&dc < tc + s)//在这个里面 { MyCheseBoard(ar, tr + s, tc, dr, dc, s); } else { ar[tr + s][tc + s - 1] = t; MyCheseBoard(ar, tr + s, tc, tr + s, tc + s - 1, s); } if (dr >= tr + s&&dc >= tc + s)//在这个里面 { MyCheseBoard(ar, tr + s, tc + s, dr, dc, s); } else { ar[tr + s][tc + s] = t; MyCheseBoard(ar, tr + s, tc + s, tr + s, tc + s, s); } if (dr < tr + s&&dc >= tc + s) { MyCheseBoard(ar, tr, tc + s, dr, dc, s); } else { ar[tr + s - 1][tc + s] = t; MyCheseBoard(ar, tr, tc + s, tr + s - 1, tc + s, s); }}int main(){ Array ar = { 0 }; int tr = 0, tc = 0; int n = N; int dr, dc; cin >> dr >> dc; ar[dr][dc] = -1; Print_2Array(ar); MyCheseBoard(ar, tr, tc, dr, dc, n); Print_2Array(ar); return 0;}
0 0
- 棋盘覆盖算法
- 棋盘覆盖算法
- 棋盘覆盖算法
- 棋盘覆盖算法
- java 棋盘覆盖算法
- 棋盘覆盖算法
- 分治算法--棋盘覆盖
- 棋盘覆盖问题 算法
- 棋盘覆盖算法
- 棋盘覆盖算法
- 分治算法---棋盘覆盖
- 棋盘覆盖算法代码
- 贪心算法棋盘覆盖
- 算法设计☞棋盘覆盖
- 算法[递归]-棋盘覆盖问题
- 棋盘覆盖(分治算法)
- 【编程素质】算法-棋盘覆盖
- 棋盘覆盖问题-经典算法
- 自定义dialog样式
- 设计模式(20)-中介者模式
- 洛谷 P1272 重建道路
- 第九周项目2-对称矩阵压缩存储的实现与应用(2)
- codechef minxor
- 棋盘覆盖算法
- BP神经网络
- Codeforce 543A(递推优化)
- html知识点概要(一)
- shell学习之旅
- Redis系列~(十七)Could not connect to Redis No route to host问题解决
- 安卓在xml文件(布局文件)中做一些细微改变却运行程序报错的原因
- 保存user data镜像
- 支付宝使用即时到账接口收款