编辑代码

#include <iostream>

#include <queue>

using namespace std;

class Node
{
public:
  Node(int n) : t(0), n(n)
  {
       pos = new int[n + 1];
       for (int i = 0; i <= n; ++i)
       {
            pos[i] = 0;
       }
  }
  Node(const Node& other)
  {
       t = other.t;
       n = other.n;
       pos = new int[other.n + 1];
       for (int i = 0; i <= n; ++i)
       {
            pos[i] = other.pos[i];
       }
  }
  ~Node()
  {
       if (pos != NULL)
       {
            delete[] pos;
            pos = NULL;
       }
  }
  bool check(int next);
  int t;
  int n;
  int *pos; 
};
bool Node::check(int next)
{
  int i; 
  for (i = 1; i <= t; ++i)
  {
       int j = pos[i]; 
       if (j == next)
       {
            return false;
       }
       if ((next - j) == (i - 1 - t))
       {
            return false;
       }
       if ((next - j) == (t + 1 - i))
       {
            return false;
       }
  }
  return true;
}
class Queen
{
public:
  Queen(int x) : n(x), ansNum(0){}
  int QueenArrange(); 
private:
  int n; 
  int ansNum; 
};
int Queen::QueenArrange()
{
  queue<Node> q;
  Node f(n);
  q.push(f);
  while (!q.empty())
  {
       Node x = q.front();
       q.pop();
       if (x.t == n)
       {
            ++ansNum;
       }
       for (int i = 1; i <= n; ++i)
       {
                 if (x.check(i))
                 {
                      Node child(x);
                      ++child.t;
                      child.pos[child.t] = i; 
                      q.push(child);
                 }
       }
  }
  return ansNum;
}
int main()
{
  int n = 4;
  Queen queen(4);
  cout << queen.QueenArrange() << endl;
}