[LeetCode] N-Queens

来源:互联网 发布:日本爱知电机 编辑:程序博客网 时间:2024/06/05 03:50

The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.

Given an integer n, return all distinct solutions to the n-queens puzzle.

Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space respectively.

For example,
There exist two distinct solutions to the 4-queens puzzle:

[ [".Q..",  // Solution 1  "...Q",  "Q...",  "..Q."], ["..Q.",  // Solution 2  "Q...",  "...Q",  ".Q.."]]

class Solution {public:    vector<vector<string> > ans;    vector<string> v;    int *col;    string s;    vector<vector<string> > solveNQueens(int n) {        for(int i = 0;i < n;i ++)            s.push_back('.');        col = new int[n];        generate(n,0);        return ans;    }    void generate(int n,int dep){        if(dep == n){            ans.push_back(v);            return;        }        for(int i = 0;i < n;i ++){            if(check(dep,i)){                string ss = s;                ss[i] = 'Q';                v.push_back(ss);                generate(n,dep + 1);                v.pop_back();                col[dep] = -1;            }        }    }    bool check(int k,int i){        col[k] = i;        for(int i = 0;i < k;i ++)            if(col[i] == col[k] || abs(col[i] - col[k]) == abs(i - k)) return false;        return true;    }};



0 0
原创粉丝点击