我最近读到了 8 个皇后问题,并尝试用 C++ 自己解决它。我创建了一个名为 eq.h 的类、一个名为 eq.cpp 的实现文件和一个 main.cpp。
我不确定的是,如何检查行、列和对角线冲突?我在想的是,使用嵌套的 for 循环进行冲突检查。那怎么应用?为此,我创建了一个 valid() 函数。以下是我到目前为止所得到的。
1) eq.h
#ifndef 8QUEEN_H
#define 8QUEEN_H
#include <iostream>
#include <algorithm>
using namespace std;
class 8queen
{
public:
8queen();
~8queen();
int solve();//solve problem using next_permutation
void display();
private:
bool valid();
int queens[8]; //array to store 8 integers that represent 8 queens
};
#endif
2) eq.cpp
#include "eq.h"
#include <iostream>
#include <algorithm>
using namespace std;
8queen::8queen()
{
for(int i=0;i<0;i++)
{
queens[i]=i;
}
}
8queen::~8queen()
{
}
//using next_perm, return all possible positions of the queens
int 8queen::solve()
{
int count=0;
do{
if(valid())
{
count++;
display();
}
}
while(next_permutation(queens,queens+8));
return count;
}
//display the positions of the queens
void 8queen::display()
{
for(int i=0; i<0;i++)
{
cout<<queens[i]<<' ';
cout<<endl;
}
}
//check if position is valid or not
bool 8queen::valid()
{
return true;
}
3) main.cpp
#include "eq.h"
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
8queen object;
cout<<object.solve()<<endl;
}