主题:为什么我写的八皇后程序老是调试不成功?
#include <iostream>
using namespace std;
const int BOUND = 8;
void queen(int (*)[BOUND], int);
int abs(int);
void print(int (*)[BOUND]);
int main()
{
int chessboard[BOUND][BOUND] = {0}; // 定义棋盘,置初值为0
queen(chessboard, 0); //调用八皇后程序.
return 0;
}
int abs(int x)
{
return x > 0 ? x: -x;
}
void print(int (*matrix)[BOUND])
{
int i, j;
for (i = 0; i < BOUND; i++)
{
for (j = 0; j < BOUND; j++)
cout << matrix[i][j] << " ";
cout << endl;
}
}
void queen(int (*chess)[BOUND], int col) //col为当前皇后所在列
{
if (col >= BOUND)
{
print(chess);
cout << endl;
}
else
{
int row = 0;
while (row < BOUND) //遍历每一行,如果有适当位置,则插入皇后.
{
if (col == 0) //若所在列为第1列,则皇后可以随便安置.
{
chess[row][col] = 1;
queen(chess, col + 1);
}
else
{
int i, j, flag = 0;
for (i = 0; i <= BOUND; i++) //判断当前列是否能安置皇后
{
for (j = 0; j < col; j++)
{
if ( (i == row || abs(i - row) == abs(j - col) ) && chess[i][j] == 1 )
flag = 1;
}
if (flag)
break;
}
if (!flag) //如果flag为0,则表明当前位置可以安置.
{
chess[row][col] = 1;
queen(chess, col + 1);//调用下一列.
}
chess[row][col] = 0; //如果第col+1列没有适当位置,则置第row行col列的值为0,继续搜索下一行.
}
row++;
}
}
}
以上算法我觉得似乎没什么错误,但奇怪的是,运行后什么结果都没有.怎么会这样子的?
using namespace std;
const int BOUND = 8;
void queen(int (*)[BOUND], int);
int abs(int);
void print(int (*)[BOUND]);
int main()
{
int chessboard[BOUND][BOUND] = {0}; // 定义棋盘,置初值为0
queen(chessboard, 0); //调用八皇后程序.
return 0;
}
int abs(int x)
{
return x > 0 ? x: -x;
}
void print(int (*matrix)[BOUND])
{
int i, j;
for (i = 0; i < BOUND; i++)
{
for (j = 0; j < BOUND; j++)
cout << matrix[i][j] << " ";
cout << endl;
}
}
void queen(int (*chess)[BOUND], int col) //col为当前皇后所在列
{
if (col >= BOUND)
{
print(chess);
cout << endl;
}
else
{
int row = 0;
while (row < BOUND) //遍历每一行,如果有适当位置,则插入皇后.
{
if (col == 0) //若所在列为第1列,则皇后可以随便安置.
{
chess[row][col] = 1;
queen(chess, col + 1);
}
else
{
int i, j, flag = 0;
for (i = 0; i <= BOUND; i++) //判断当前列是否能安置皇后
{
for (j = 0; j < col; j++)
{
if ( (i == row || abs(i - row) == abs(j - col) ) && chess[i][j] == 1 )
flag = 1;
}
if (flag)
break;
}
if (!flag) //如果flag为0,则表明当前位置可以安置.
{
chess[row][col] = 1;
queen(chess, col + 1);//调用下一列.
}
chess[row][col] = 0; //如果第col+1列没有适当位置,则置第row行col列的值为0,继续搜索下一行.
}
row++;
}
}
}
以上算法我觉得似乎没什么错误,但奇怪的是,运行后什么结果都没有.怎么会这样子的?