C ++ - 8皇后计划 - 国际象棋版

时间:2014-03-22 18:07:52

标签: c++ windows

我被指派使用排列代码,并将其转换为国际象棋棋盘上的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;
}

1 个答案:

答案 0 :(得分:0)

你的attempt()递归函数调用导致堆栈溢出。有问题。检查此功能中的中断条件。