0

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

2 に答える 2