2 u013932804 u013932804 于 2014.03.06 12:42 提问

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

#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;
}

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!