算法分析与设计之棋盘覆盖问题
2017-12-02 11:20
260 查看
问题描述:在一个2K*2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中我们要用4个不同形态的L行形骨牌覆盖一个特定的棋盘上除特殊方格以外的所有方格,并且任何2个L形骨牌不得重叠覆盖。
问题分析:对于特殊方格在棋盘上的位置,显然有4K种不同情形,也就意味着有4k种不同的棋盘,在任何一个2k*2K的棋盘覆盖中,用到的L形骨牌个数恰为(4k-1)/3
算法
bbe1
思想:在解决棋盘覆盖问题时,我们可以将棋盘分割为4个子棋盘,而那个特殊方块必位于这4个子棋盘中,其余的3个子棋盘没有特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘,我们可以用L型骨牌覆盖这3个子棋盘的汇合处。从而形成4个都有特殊方格的子棋盘,进而将该问题转化为4个子棋盘的覆盖问题,而这4个子棋盘又可以进一步递归下去,直到棋盘简化为1*1的棋盘
程序代码:
运行截图:
问题分析:对于特殊方格在棋盘上的位置,显然有4K种不同情形,也就意味着有4k种不同的棋盘,在任何一个2k*2K的棋盘覆盖中,用到的L形骨牌个数恰为(4k-1)/3
算法
bbe1
思想:在解决棋盘覆盖问题时,我们可以将棋盘分割为4个子棋盘,而那个特殊方块必位于这4个子棋盘中,其余的3个子棋盘没有特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘,我们可以用L型骨牌覆盖这3个子棋盘的汇合处。从而形成4个都有特殊方格的子棋盘,进而将该问题转化为4个子棋盘的覆盖问题,而这4个子棋盘又可以进一步递归下去,直到棋盘简化为1*1的棋盘
1 | 2 |
3 | 4 |
程序代码:
#include<iostream> using namespace std; int Board[4][4]; int tile=0; void ChessBoard(int tr,int tc,int dr,int dc,int size) { if(size==1) return ; int t=tile++; int s=size/2; //cout<<t; 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() { ChessBoard(0,0,0,0,4); for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { cout<<" "<<Board[i][j]; } cout<<endl; } }
运行截图:
相关文章推荐
- 计算机算法设计与分析之棋盘覆盖问题
- 算法分析与设计之棋盘覆盖问题
- 计算机算法设计与分析之棋盘覆盖问题
- 【算法设计与分析】2、棋盘覆盖问题
- 计算机算法设计与分析作业01:分治法求解大数乘法+L型骨牌的棋盘覆盖问题
- 棋盘覆盖 算法分析、设计与实现(Java)
- 棋盘覆盖问题(算法分析)(Java版)
- 高效算法设计_递归与分治(棋盘覆盖问题,循环日程表,巨人与鬼)
- 棋盘覆盖问题算法分析与实现(递归)
- 棋盘覆盖问题的算法设计
- 算法设计与分析--01背包问题(动态规划法解决)
- 算法分析与设计实验二(关于动态规划问题)
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- java&nbsp;&nbsp;棋盘覆盖程序&nbsp;算法分析题目
- n阶Hanoi塔问题 - 算法设计与分析实验1
- 算法设计与分析之棋盘算法
- 算法分析与设计2017-2-背包问题的贪心算法
- 算法设计与分析--N皇后问题实现程…
- 分治算法之 棋盘覆盖问题(完整代码实现)
- 算法分析与设计-13-活动安排问题的贪心算法