私は最近、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;
}