N-Queen
Q:八皇后问题。DFS
vector<vector<string> > solveNQueens(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<vector<string> > result; if(n<=0) return result; vector<int> positions; Queens(0,n,positions,result); return result; } void Queens(int nrow,int n,vector<int>& positions,vector<vector<string> >& result) { if(nrow==n) { printSolution(positions,result); return; } for(int i=0;i<n;i++) { if(checkvalid(i,positions)) { positions.push_back(i); Queens(nrow+1,n,positions,result); positions.pop_back(); } } } bool checkvalid(int ncol,vector<int>& positions) { int rows = positions.size(); for(int i=0;i<rows;i++) { if(positions[i]==ncol||rows-i==ncol-positions[i]||rows+ncol==i+positions[i]) //not in the same colomn return false; } return true; } void printSolution(vector<int>& positions,vector<vector<string> >& result) { vector<string> solution; int n = positions.size(); for(int i=0;i<n;i++) { string str = ""; for(int j=0;j<positions[i];j++) str+="."; str+="Q"; for(int j=positions[i]+1;j<n;j++) str+="."; solution.push_back(str); } result.push_back(solution); }