LeetCode(N-Queens)

来源:互联网 发布:matlab2015b for mac 编辑:程序博客网 时间:2024/05/16 10:17

N-Queens
深搜:

class Solution {public:    vector<vector<string> > solveNQueens(int n) {        vector<vector<string> > result;        vector<int> path;        dfs(n,result,path,0);        return result;    }    void dfs(int n,vector<vector<string> > &result,vector<int> &path,int i)    {        if(i==n)        {            vector<string> res;            for(int j=0;j<n;++j)            {                string s(n,'.');                s[path[j]]='Q';                res.push_back(s);            }            result.push_back(res);            return;        }        for(int j=0;j<n;++j)        {            path.push_back(j);            if(isValid(path,i))dfs(n,result,path,i+1);              path.pop_back();           }    }    bool isValid(vector<int> &path,int i)      {          for(int j=0;j<i;++j)          {              if(path[i]==path[j]||abs(i-j)==abs(path[i]-path[j]))return false;          }          return true;      }  };

N-Queens II
深搜:

class Solution {public:    int totalNQueens(int n) {        int result=0;        vector<int> path;        dfs(n,result,path,0);        return result;    }    void dfs(int n,int &result,vector<int> &path,int i)    {        if(i==n)        {            ++result;            return;        }        for(int j=0;j<n;++j)        {            path.push_back(j);            if(isValid(path,i))dfs(n,result,path,i+1);              path.pop_back();           }    }    bool isValid(vector<int> &path,int i)      {          for(int j=0;j<i;++j)          {              if(path[i]==path[j]||abs(i-j)==abs(path[i]-path[j]))return false;          }          return true;    }};
0 0
原创粉丝点击