您的位置:首页 > 编程语言 > C语言/C++

C++棋盘覆盖问题源代码以及运行结果

2014-03-16 19:37 218 查看
C++棋盘覆盖问题源代码以及运行结果

#include<iostream>

#include<iomanip> //包含设置域宽的头文件

#include<stdlib.h> //标准库

using namespace std;

int tile = 0;

int *(*board) = NULL; //定义指向指针的指针用于动态的创建用于存储骨牌号的数组

void ChessBoard(int tr, int tc, int dr, int dc, int size)

{

if (size == 1) return;

int t = tile++, // L型骨牌号

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 {

// 此棋盘中无特殊方格

// 用 t 号L型骨牌覆盖左下角

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

{

// 用 t 号L型骨牌覆盖右上角

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 {

// 用 t 号L型骨牌覆盖左上角

board[tr + s][tc + s] = t; //覆盖其余方格

ChessBoard(tr + s, tc + s, tr + s, tc + s, s);

}

}

int main()

{

p1:int tx = 0, ty = 0, sp, dx, dy, zsize;

//定义棋盘的左上角方格、特殊方格的行号和列号以及棋盘大小

cout << "请输入特殊方格的行号:"; cin >> dx; cout << endl; //提示用户输入

cout << "请输入特殊方格的列号 :"; cin >> dy; cout << endl;

cout << "请输入要填充特殊方格的数字: "; cin >> sp; cout << endl;

cout << "请输入棋盘的大小(棋盘大小必须为2的n方!) : ";

cin >> zsize; cout << endl;

board = new int *[zsize];

for (int i = 0; i < zsize; i++)

{

board[i] = new int[zsize]; /*********动态创建数组结束************/

}

board[dx-1][dy-1] = sp; //特殊方格用sp填充

ChessBoard(tx, ty, dx-1, dy-1, zsize); //输出结果

//cout << tx << ty << dx << dy << zsize;

//system("pause");

for (int j = 0; j < zsize; j++)

{

for (int m = 0; m < zsize; m++)

{

cout << setw(6) << board[j][m]; //域宽为6

}

cout << endl;

}

system("pause");

goto p1;

return 0;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: