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 java 操作 elasticsearch 8.1 实现 索引的重建
    • ¥15 数据可视化Python
    • ¥15 要给毕业设计添加扫码登录的功能!!有偿
    • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
    • ¥15 微信公众号自制会员卡没有收款渠道啊
    • ¥100 Jenkins自动化部署—悬赏100元
    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘