棋盘覆盖问题

来源:互联网 发布:詹姆斯生涯场均数据 编辑:程序博客网 时间:2024/06/06 18:47
Problem description  在一个2k x 2k ( 即:2^k x 2^k )个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2L型骨牌不得重叠覆盖。


Input  输入文件第一行是一个整数T,表示有多少组测试数据,接下来是T组测试数据,共2T行,每组第一行为整数n,2n次幂(1<=n<=64),表示棋盘的大小为n*n,第二行是两个整数,代表特殊方格所在行号和列号。
Output  先输出“CASE:i,然后按样例输出。数据间用制表符隔开(‘t’),每行最后一个数据后无制表符。
Sample Input
220 082 2
Sample Output
CASE:10       11       1CASE:23       3       4       4       8       8       9       93       2       2       4       8       7       7       95       2       0       6       10      10      7       115       5       6       6       1       10      11      1113      13      14      1       1       18      19      1913      12      14      14      18      18      17      1915      12      12      16      20      17      17      2115      15      16      16      20      20      21      21
Judge Tips  要求遍历顺序按从左到右,从上到下。
Problem Source

  qshj

#include<iostream>using namespace std;int tile=1;                   //L型骨牌的编号(递增)int board[100][100];  //棋盘/****************************************************** 递归方式实现棋盘覆盖算法* 输入参数:* tr--当前棋盘左上角的行号* tc--当前棋盘左上角的列号* dr--当前特殊方格所在的行号* dc--当前特殊方格所在的列号* size:当前棋盘的:2^k*****************************************************/void chessBoard ( int tr, int tc, int dr, int dc, int size ){    if ( size==1 )    //棋盘方格大小为1,说明递归到最里层        return;    int t=tile++;     //每次递增1    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 );    }}void main(){    int size;    cout<<"输入棋盘的size(大小必须是2的n次幂): ";    cin>>size;    int index_x,index_y;    cout<<"输入特殊方格位置的坐标: ";    cin>>index_x>>index_y;    chessBoard ( 0,0,index_x,index_y,size );    for ( int i=0; i<size; i++ )    {        for ( int j=0; j<size; j++ )            cout<<board[i][j]<<"/t";        cout<<endl;    }}


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小星星洗澡儿歌 小星星英语歌词 你是我的小星星是什么歌 小星星谱 小星星儿歌歌词 小星星钢琴曲 小星星钢琴 小星星 亮晶晶 小吉网 小昭寺 小昭寺简介 小凰不是仙 神话之我不是易小川 神话我不是易小川 娱乐我不是小鲜肉 再回神话之我是易小川 小影霸显卡怎么样 小机箱显卡 显卡n卡好还是a卡好 迷你显卡 显卡多少度会烧坏 升级显卡驱动黑屏 2018显卡天梯图高清 显卡1g多少钱 显卡和主板不兼容 笔记本显卡型号排行 影驰1050显卡 显卡2g和4g有什么区别 蓝宝石显卡客服电话 笔记本显卡一般多少钱 华硕gtx650显卡怎么样 显卡ti和不带ti有什么区别 集成显卡怎么样 显卡1070多少钱 显卡拓展 740显卡 外置显卡笔记本 电脑显卡品牌排行榜 r7360 gtx940 k620