编辑代码

#include <iostream>
#include <vector>
#include <list>

using namespace std;

void printQueenResult(int size, vector<int> result) {
    for (size_t row = 0; row < size; ++row)
    {
        for (size_t column = 0; column < size; ++column)
        {
           if (result[row] == column)
           {
               cout << "X";
           }
           else {
               cout << "O";
           }
           
        }
        cout << endl;
    }
    cout << endl;
    
}
bool isValid(int size, vector<int> &result, int row, int column) {
    int leftUp = column - 1;
    int rightUp = column + 1;
    for (int r = row - 1; r >= 0; --r)
    {
        if(result[r] == column)
        {
            return false;
        }
        if (leftUp >= 0 && result[r] == leftUp)
        {
            return false;
        }
        if (rightUp < size && result[r] == rightUp )
        {
            return false;
        }

        
        --leftUp;
        ++rightUp;
    }

    return true;
    
}
void queen(int size, int row, int &count, vector<int> &result, list<vector<int> > &results) {
    if (size == row) {
        ++count;
        results.push_back(vector<int>(result));
        return;
    }
    for (size_t column = 0; column < size; ++column)
    {
        if (isValid(size, result, row, column))
        {
            result[row] = column;
            queen(size, row + 1, count, result, results);
        }
    }

}

int main() {
    int size = 0;
    

    while (true)
    {
        cout << "Please enter the size of queen problem:" << endl;
        cin >> size;
        if (size <= 0)
        {
            cout << "Exit" << endl;
            break;
        }

        vector<int> result(size, 0);
        list<vector<int> > results;
        int count = 0;

        queen(size, 0, count, result, results); 

        cout << "We have " << count << " methods." << endl;
        
        for (list<vector<int> >::iterator i = results.begin();
        i != results.end(); ++i)
        {
            printQueenResult(size, *i);
        }
         

        
    }
    
    
}