c++解决n皇后问题

关键点就是判断不在同列和对角:(abs(t-i) == abs(x[i]-x[t])) || (x[i] == x[t])

#include  
#include
using namespace std;

class Queen
{
private:
    int n;
    int *x; 
    int sum; 
public:
    Queen();
    ~Queen();
    void setn(int num);
    bool Place(int t);
    void Backtrack(int t);
    void outputX();
    void outputsum();
    
};

Queen::Queen()
{
    sum=0;  n=0; x=NULL;
}


Queen::~Queen()
{
    delete x;
}
void Queen::setn(int num)
{
    n=num;
    x=new int[num+1];
}
bool Queen::Place(int t) 

    int i; 
    for (i=1; i         if ((abs(t-i) == abs(x[i]-x[t])) || (x[i] == x[t])) 
            return false; 
    return true; 

void Queen::Backtrack(int t) 

    int i;
    if (t>n) 
    {
        sum++;
        outputX();
    }
    else
        for (i=1; i<=n; i++) 
        {
            x[t] = i;
            if (Place(t)) Backtrack(t+1);
        }

void Queen::outputX()
{   int i;
    for (i=1; i<=n; i++) 
            cout<     cout< }

void Queen::outputsum()
{
   cout<<"Total="< }

int main() 

    Queen MyQueen;
    int number;
    cout<<"input the number of queens: ";
    cin>>number;
    MyQueen.setn(number);
    MyQueen.Backtrack(1);
    MyQueen.outputsum();
    return 0; 

 

你可能感兴趣的:(c++解决n皇后问题)