0
我继续得到这个奇怪的错误,它正在打印我的解决方案不正确。我相信它与printSolution()
方法有关,因为它打印出“Q Q * Q Q Q Q Q”(尽管这是不正确的),然后我得到了分段错误错误。新来的c + +得到一个奇怪的分段错误错误
这里是我的.cpp
:
#include "NQueens.h"
#include<iostream>
using namespace std;
NQueens::NQueens()
{
}
NQueens::~NQueens()
{
cout <<"Destroying an object"<<endl;
}
void NQueens::printBoard(int board[], int N)
{
std::cout<<endl;
for(int i = 0; i<N; i++)
{
int chessBoard[N];
chessBoard[board[i]] = 1;
for(int j =0; j<N; j++)
{
if(chessBoard[j]==0)
std::cout<<"* ";
else
std::cout<<"Q ";
}
std::cout<<endl;
}
}
bool NQueens::safePlace(int row, int col, int board[])
{
for(int i = 0; i<row; i++)
{
if((board[i] == col) || (i-row)==(board[i]-col) || (i-row) == (col-board[i]))
return false;
}
return true;
}
void NQueens::solve(int N)
{
int board[N];
int row = 0;
while(row<N && row>-1)
{
// condition that the row is occupied and the queen is safe to place
if(board[row]>-1 && board[row]<(N-1))
{
for(int i = board[row]+1; i<N; i++)
{
//checks for safety
if(safePlace(row, i, board))
{
board[row]=i;
++row;
break;
}
else if(i==(N-1))
{
board[row]=-1;
--row;
}
}
}
else if(board[row]==-1 && board[row]<(N-1))
{
for(int i = 0; i<N;i++)
{
if(safePlace(row, i, board))
{
board[row]=i;
++row;
break;
}
else if(i==(N-1))
{
board[row]=-1;
--row;
}
}
}
else
{
board[row]=-1;
--row;
}
}
printBoard(board,N);
}
int main()
{
NQueens driver;
driver.solve(8);
return 0;
}
难道这是因为循环语句达到零?
我看到的一个问题是,您正在使用'i'在'for'循环的每个循环中初始化一个新的'chessBoard [N]'。 – DigitalNinja 2015-04-02 00:54:30
这不是标准的C++:'int chessBoard [N];'必须使用常量表达式来声明C++中的数组,而不是一个变量。 – PaulMcKenzie 2015-04-02 00:56:16