编辑代码

#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;
        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);
        }
    } 
}