• 棋盘覆盖问题


    棋盘覆盖问题

    #include<iostream>  

    using namespace std;  

        int tile=1;  

        int board[100][100];  

        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 );  

            }  

        }  

          

        int main()  

        {  

            int size;  

            cout<<"输入棋盘的size(大小必须是2n次幂): ";  

            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]<<" ";  

                cout<<endl;  

            }  

    return 0;

        } 

  • 相关阅读:
    [转]了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult
    [转]XPath 语法
    [转]XSL 语言
    [转]项目经理面试指南
    [转]《精通css》笔记1:css选择器与优先级
    [转]jQuery 简介
    [转]Android 70道面试题
    [书目20130316].NET应用架构设计:原则、模式与实践
    [转]XPath语法 在C#中使用XPath示例
    [转]Android面试3
  • 原文地址:https://www.cnblogs.com/Anei/p/7821003.html
Copyright © 2020-2023  润新知