lintcode: N-Queens

来源:互联网 发布:花椒刷人气软件 编辑:程序博客网 时间:2024/06/15 18:42

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.

class Solution {public:    /**     * Get all distinct N-Queen solutions     * @param n: The number of queens     * @return: All distinct solutions     * For example, A string '...Q' shows a queen on forth position     */    vector<vector<string> > res;    void dfs(vector<int> &solution,int n,int cur){        if(cur==n){            string str="";            for(int i=0;i<n;i++){                str+='.';            }            vector<string> vec;            for(int i=0;i<n;i++){                string tmp=str;                tmp[solution[i]]='Q';                vec.push_back(tmp);            }            res.push_back(vec);            return;        }        for(int i=0;i<n;i++){            solution.push_back(i);            bool ok=true;            for(int j=0;j<cur;j++){                if(i==solution[j]|| (cur+i)==(j+solution[j])|| (cur-i)==(j-solution[j])){                    ok=false;                    break;                }            }            if(ok){                dfs(solution,n,cur+1);                solution.pop_back();            }else{                solution.pop_back();            }        }    }    vector<vector<string> > solveNQueens(int n) {        // write your code here        vector<int> solution;        dfs(solution,n,0);        return res;    }};
0 0
原创粉丝点击