这是我的代码:
#include<iostream>
private int chessBoard[8][8];
void printBoard(int board[][])
{
for(int i=0; i<8; i++)
{
for(int j=0; j<8; j++)
{
if(board[i][j])
{
cout<<"Q ";
}
else
{
cout<<"* ";
}
}
cout<<endl;
}
}
//This method will check if any queens are in attacking position to the left of the test queen placement
bool checkSpot(int board[][],int row, int col)
{
bool safe = true;
//checks the current row for queens
for(int i=0; i<col, i++)
{
if(board[row][i])
safe=false;
{
//checks the upper diag
for( int i=row, int j=col; i>0 && j>0; i--, j--)
{
if(board[i][j])
safe=false;
}
//checks lower diag
for(int i = row, int j=col; i<8 && j>0; i--, j++)
{
if(board[i][j])
safe=false;
}
if(safe)
{
return true;
}
else
return false;
}
bool solve(int board[][], int testCol)
{
bool solved = false;
bool safe;
if(testCol==8)
{
solved = true;
return solved;
}
for(int i =0; i>8; i++)
{
// test if the tested column(testCol) and the row(i) are both safe for the queen to be placed at then we can move into placing said queen and more onto the next column for
// more solutions in this same method recursivly
safe = checkSpot(board, i, testCol);
if(safe)
{
//place the queen
board[i][col]=1;
//recursion to go back through this method in the next column
if(solve(board[][], testCol+1)
{
solved = true;
printBoard(board)
return solved;
}
else
{
//if the queen cannot be placed, we have to remove the previous queens and move them until a solution is found.
board[i][testCol]=0;
}
}
}
int main()
{
solve(chessBoard, 0);
}
我继续得到的错误如下:
8queens.cpp:3:17: error: variable or field ‘printBoard’ declared void
void printBoard(board[][])
^
8queens.cpp:3:17: error: ‘board’ was not declared in this scope
8queens.cpp:3:23: error: expected primary-expression before ‘]’ token
void printBoard(board[][])
^
8queens.cpp:3:25: error: expected primary-expression before ‘]’ token
void printBoard(board[][])
这个逻辑非常简单(至少我希望它运行良好)但我甚至无法通过编译器。我可以就这个问题得到一些指导吗?
你们都是一个巨大的帮助,但遗憾的是我发现我只能使用1d数组来解决这个问题所以我必须从头开始。再次感谢大家的帮助,您的建议一定会帮助我。
答案 0 :(得分:2)
嗯,你的代码中有很多错误。让我们看看它们。
首先,从
中删除private
private int chessBoard[8][8];
您只需要对类成员使用private
。所以把它改成
int chessBoard[8][8];
接下来,在您的所有功能中,您都有类似
的功能void printBoard(int board[][])
^
here, it's wrong
你需要提供尺码,你只能跳过第一尺码,所有其余部分必须提供以便更好地将其改为
void printBoard(int board[][8])
^
it's okay to leave this one
对所有功能进行更改。
您的代码的某些地方也遗漏了一些}
。
差点忘了,你需要添加一个
using namespace std;
在标题之后,或使用
std::cin
std::cout
和
std::endl
而不是cin
,cout
和endl
。
你也有
for(int i=0; i<col, i++)
^
you need a semicolon here
还
for( int i=row, int j=col; i>0 && j>0; i--, j--)
^
no need for another int here
将其更改为
for( int i=row, j=col; i>0 && j>0; i--, j--)
答案 1 :(得分:0)
这个编译。至于我做了什么,有很多,并且需要一段时间来写下每件事。需要注意的一件重要事情是for loops
。
你有:
for( int i=row, int j=col; i>0 && j>0; i--, j--)
{
if(board[i][j])
safe=false;
}
如果要执行嵌套for loop
,请执行以下操作:
for (int i = row; i > 0; i--)
{
for (int j = col; j > 0; j--)
{
if (board[i][j])
safe = false;
}
}
另外,请注意括号{} ()
,因为它们不一致且有些丢失。
对于数组,在使用2d数组时必须至少指定一个维度。
你在不同的地方有int board[][]
。您必须:int board[][8]
代替。
另外,如果你想使用cout
,endl
,cin
等等,你必须拥有include namespace std;
,否则你将不得不使用{{1} },std::cout
,std::endl
。
但无论如何,现在应该编译。
std::cin