说明:假设你已经完全搞懂了原理,目的旨在帮助用C++实现有困难的同学。
#include "pch.h"
#include <iostream>
#include <iomanip>
#define boa_size 8
#define b_x 3
#define b_y 3
using namespace std;
void defective_chessboard(int x, int y, int board_size, int begin_x, int begin_y, int **p)
{
static int step = 1;
if (board_size != 1)
{
board_size /= 2;
if ((x <begin_x + board_size) && (y <begin_y + board_size))//左上角
{
++step;
p[board_size + begin_x - 1][board_size + begin_y] = p[board_size + begin_x][board_size + begin_y] = p[board_size + begin_x][board_size + begin_y - 1] = step;
defective_chessboard(x, y, board_size, begin_x, begin_y, p);
defective_chessboard(board_size + begin_x, board_size + begin_y-1, board_size, begin_x + board_size, begin_y, p);//左下
defective_chessboard(board_size + begin_x, board_size + begin_y, board_size, begin_x + board_size, board_size + begin_y, p);
defective_chessboard(board_size + begin_x, board_size + begin_y - 1, board_size, begin_x, begin_y + board_size, p);
}
else if ((x >=begin_x + board_size) && (y <begin_y + board_size))//左下角
{
++step;
p[board_size + begin_x - 1][board_size + begin_y] = p[board_size + begin_x][board_size + begin_y] = p[board_size + begin_x - 1][board_size + begin_y - 1] = step;
defective_chessboard(x, y, board_size, begin_x + board_size, begin_y, p);
defective_chessboard(board_size + begin_x - 1, board_size + begin_y - 1, board_size, begin_x, begin_y, p);
defective_chessboard(board_size + begin_x, board_size + begin_y, board_size, begin_x + board_size, board_size + begin_y, p);
defective_chessboard(board_size + begin_x, board_size + begin_y - 1, board_size, begin_x, begin_y + board_size, p);
}
else if ((x <begin_x + board_size) && (y >=begin_y + board_size))//右上角
{
++step;
p[board_size + begin_x][board_size + begin_y-1] = p[board_size + begin_x][board_size + begin_y] = p[board_size + begin_x - 1][board_size + begin_y - 1] = step;
defective_chessboard(x, y, board_size, begin_x, begin_y + board_size, p);
defective_chessboard(board_size + begin_x - 1, board_size + begin_y, board_size, begin_x + board_size, begin_y, p);
defective_chessboard(board_size + begin_x, board_size + begin_y, board_size, begin_x + board_size, board_size + begin_y, p);
defective_chessboard(board_size + begin_x - 1, board_size + begin_y - 1, board_size, begin_x, begin_y, p);
}
else//右下角
{
++step;
p[board_size + begin_x - 1][board_size + begin_y] = p[board_size + begin_x - 1][board_size + begin_y - 1] = p[board_size + begin_x][board_size + begin_y - 1] = step;
defective_chessboard(x, y, board_size, begin_x + board_size, begin_y + board_size, p);
defective_chessboard(board_size + begin_x - 1, board_size + begin_y, board_size, begin_x + board_size, begin_y, p);
defective_chessboard(board_size + begin_x - 1, board_size + begin_y - 1, board_size, begin_x, begin_y, p);
defective_chessboard(board_size + begin_x, board_size + begin_y - 1, board_size, begin_x, begin_y + board_size, p);
}
}
}
int main()
{
int **p;
p = new int*[boa_size+1];
for (int i = 1; i <= boa_size; ++i)
p[i] = new int[boa_size+1];
for (int i = 1; i <= boa_size; ++i)
for (int j = 1; j <= boa_size; ++j)
p[i][j] = 0;
p[b_x][b_y] = 1;
defective_chessboard(b_x, b_y, boa_size, 1, 1, p);
for (int i = 1; i <= boa_size; ++i)
{
for (int j = 1; j <= boa_size; ++j)
{
cout << p[i][j];
if (p[i][j] < 10)
cout << " ";
else
cout << " ";
}
cout << endl;
}
return 0;
}