c++ - 8皇后程序-象棋版

C++- 8 Queens program- chess edition

本文关键字:程序 c++      更新时间:2023-10-16

我被分配使用排列代码,并将其转换为象棋棋盘上的8皇后程序。

我想我已经完成了,但是我的输出一直给堆栈溢出,我找不到它在哪里,这太疯狂了!

下面是我的代码
#include <iostream>
#include <iomanip>
using namespace std;
char board[8][8];
void clearBoard();
void attempt(int n, int level, int possibility);
void placeQueen(int level, int possibility);
void removeQueen(int level, int possibility);
bool currentPathSuccess(int n, int level, int possibility);
bool currentPathStillViable(int level, int possibility);
void processSuccessfulPath(int n);

int main()
{
int n;
clearBoard();
cout << "Permutation of integers from 1 to ? ";
cin >> n;
for (int i = 1; i <= n; i++){
    for (int j = 1; j <= n; j++)
    {
        attempt(n, i, j);
    }
}
system("pause");
return 0;
}
void clearBoard()
{
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
    board[i][j] = '_';
}
void attempt(int n, int level, int possibility)
{
placeQueen(level, possibility);
if (currentPathSuccess(n, level, possibility))
{
    processSuccessfulPath(n);
}
else if (currentPathStillViable(level, possibility))
for (int i = 0; i <= n; i++)
    attempt(n, level + 1, possibility + 1);
removeQueen(level, possibility);
}
void placeQueen(int level, int possibility)
{
board[level][possibility] = 'Q';
}
void removeQueen(int level, int possibility)
{
board[level][possibility] = '_';
}
bool currentPathSuccess(int n, int level, int possibility)
{
bool success = true;
int i = 0;
int j = 0;  
if (n > level)
    success = false;
else
{
    while ((i <= level - 1) && success)
    {
        success = board[i][j] != board[level][possibility];
        i++;
    }
}
return success;
}
bool currentPathStillViable(int level, int possibility)
{
bool viable = true;
int i = 0;
int j = 0;
while ((i <= level - 1) && viable)
{
    viable = board[i][j] /*!= board[level][possibility]*/;
    i++;
}
return viable;
}
void processSuccessfulPath(int n)
{
for (int i = 0; i <= n; i++)
{
    for (int j = 0; j <= n; j++)
    {
        cout << setw(3) << board[i][j];
    }
    cout << endl;
}
cout << endl;
}

您的attempt()递归函数调用导致堆栈溢出。有问题。查看函数内部的break条件