n-queens

来源:互联网 发布:mac air 13寸 长宽 编辑:程序博客网 时间:2024/06/03 22:39

题目:


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> > solveNQueens(int n) {        string str;        for(int i=0;i<n;i++)            str.push_back('.');        vector<string> vec;        int a[n];        for(int i=0;i<n;i++)            vec.push_back(str);        vector<vector<string> > res;        Back(n,0,res,vec,a);        return res;    }         void Back(int n,int t,vector<vector<string> > &res,vector<string> vec,int *a)    {        if(n == t)        {            res.push_back(vec);            return;        }        for(int i=0;i<n;i++)        {            a[t] = i;            if(Push(t,a))            {                vec[t][i] = 'Q';                Back(n,t+1,res,vec,a);                vec[t][i] = '.';            }        }    }         bool Push(int m,int a[])    {        bool flag = true;        for(int i=0;i<m;i++)        {            if(a[i] == a[m] || abs(a[m]-a[i]) == (m-i))            {                flag = false;                break;            }        }        return flag;    }};

点评:


N皇后不能再一条直线,不能对角,即坐标绝对值不能相等,递归求解


原创粉丝点击