tiantian_zhu 2014-03-06 04:42
浏览 1506

棋盘覆盖算法部分理解困难

#include
using namespace std;
const int N = 11;
int Board[N][N];
int tile = 0;

/*
tr:棋盘左上角方格的行号
tc:棋盘左上角方格的列号
dr:特殊方格所在的行号
dc:特殊方格所在的列号
size:方形棋盘的边长
*/
void ChessBoard(int tr, int tc, int dr, int dc, int size)
{
if(size == 1)
return;
int t = ++tile, s = size/2;

//覆盖左上角子棋盘
if(dr<tr+s && dc<tc+s)
    //特殊方格在此棋盘中
    ChessBoard(tr, tc, dr, dc, s);
else   // 此棋盘无特殊方格
{
    // 用t号L型骨型牌覆盖右下角
    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 DisplayBoard(int size)
{
for(int i=1; i<=size; ++i)
{
for(int j=1; j<=size; ++j)
printf("%2d ", Board[i][j]);
printf("\n");
}
}

int main()
{
ChessBoard(1, 1, 1, 2,8);
DisplayBoard(8);
return 0;
}

我想知道加粗部分覆盖的时候数组下标好像越界了,是如何正常运行的,不太理解

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 MATLAB动图问题
    • ¥15 【提问】基于Invest的水源涵养
    • ¥20 微信网友居然可以通过vx号找到我绑的手机号
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名
    • ¥65 汇编语言除法溢出问题