dfs:根据行或者列开始,
假设根据行,
从第1行开始,从第一行的每一列对应的元素开始dfs,直到第n行,输出结果
1 /************************************************************************* 2 > File Name: N-Queens.cpp 3 > Author: zhoukang1991 4 > Mail: zhoukang199191@126.com 5 > Created Time: 2014年08月14日 星期四 22时20分03秒 6 ************************************************************************/ 7 #include <iostream> 8 #include <vector> 9 #include <string> 10 #include <alogrithm> 11 using namespace std; 12 class Solution{ 13 public: 14 vector<vector<string> > res; 15 vector<vector<string> > solveNQueens(int n){ 16 res.clear(); 17 vector<int> A(n,-1); 18 solve(A,0,n); 19 return res; 20 } 21 void solve(vector<int> A,int cur,int n){ 22 if(cur == n){ 23 vector<string> r; 24 for(int i = 0; i < n ;++i){ 25 string str(n,'.'); 26 str(A[i]) = 'Q'; 27 r.push_back(str); 28 } 29 res.push_back(r); 30 } 31 else{ 32 for(int i = 0 ; i < n ; ++i){ 33 A[cur] = i; 34 if(isValid(A,cur)){ 35 solve(A,cur+1,n); 36 } 37 } 38 } 39 } 40 bool isValid(vector<int> A,int r){ 41 for(int i = 0 ; i < r ; ++i){ 42 if(A[i] == A[r] || (abs(A[i]-A[r])==(r-i))){ 43 return false; 44 } 45 } 46 return true; 47 } 48 }; 49 int main(){ 50 return 0; 51 }