zoukankan      html  css  js  c++  java
  • 棋盘覆盖

    1 #include <iostream.h>
    2 constint size=4;
    3 int board[4][4];
    4
    5 void ChessBoard(int tr,int tc,int dr,int dc,int size){
    6 int s;
    7 if(size==1)
    8 return;
    9 staticint k=0;//定义一个静态的变量 记录L骨牌号
    10 int t=++k;//
    11 s=size/2;
    12 if(dr<tr+s&&dc<tc+s)//特殊方格在左上角子棋盘
    13 ChessBoard(tr,tc,dr,dc,s);//递归吃力子棋盘
    14 else{
    15 board[tr+s-1][tc+s-1]=t;//标记 在左上角棋盘的最右下角设定一个特殊方格
    16 ChessBoard(tr,tc,tr+s-1,tc+s-1,s);//重新递归遍历
    17 }
    18
    19 if(dr<tr+s&&dc>=tc+s)//右上角
    20 ChessBoard(tr,tc+s,dr,dc,s);
    21 else{
    22 board[tr+s-1][tc+s]=t;//标记 在左上角棋盘的最左下角设定一个特殊方格
    23 ChessBoard(tr,tc+s,tr+s-1,tc+s,s);
    24 }
    25
    26 if(dr>=tr+s&&dc<tc+s)//左下角
    27 ChessBoard(tr+s,tc,dr,dc,s);//标记 在左上角棋盘的最右上角设定一个特殊方格
    28 else{
    29 board[tr+s][tc+s-1]=t;
    30 ChessBoard(tr+s,tc,tr+s,tc+s-1,s);
    31 }
    32
    33 if(dr>=tr+s&&dc>=tc+s)//右下角
    34 ChessBoard(tr+s,tc+s,dr,dc,s);//标记 在左上角棋盘的最左上角设定一个特殊方格
    35 else{
    36 board[tr+s][tc+s]=t;
    37 ChessBoard(tr+s,tc+s,tr+s,tc+s,s);
    38 }
    39 }
    40
    41 void print(int size){
    42 for(int i=0;i<size;i++){
    43 for(int j=0;j<size;j++)
    44 cout<<board[i][j]<<"";
    45 cout<<endl;}
    46 }
    47
    48 void main(){
    49 board[2][1]=0;
    50 ChessBoard(0,0,2,1,size);
    51 print(4);
    52 }

    其实这个算法很好理解,是一个典型的分治法。。

    刚开始在第9和第10行时,发生了一个错误,我也不理解。。就是直接用静态变量k++,而没有把k++赋值给t,这样虽可以编译,但是会出现错误。。

    下面是程序用到原理图

    对不存在特殊方格的子棋盘进行处理

  • 相关阅读:
    网站设计
    keepass口令管理实践
    Wireshark实践
    SSH
    Nmap
    python模拟进程状态
    简易计算器
    2020-2021-1 20201210 《信息安全专业导论》第十周学习总结
    助教总结 第八章
    Chapter 7. Chapter 8.
  • 原文地址:https://www.cnblogs.com/huaizuo/p/1983068.html
Copyright © 2011-2022 走看看