n皇后问题—回溯法 C++实现
2017-09-02 22:18
477 查看
#include <iostream> #include <vector> using namespace std; bool isLegal(int row,int col,vector<string> &v,int n) { for(int i=0;i<row;++i) if(v[i][col]=='Q') return false; for(int i=row-1,j=col-1;i>=0&&j>=0;--i,--j) if(v[i][j]=='Q') return false; for(int i=row-1,j=col+1;i>=0&&j<n;--i,++j) if(v[i][j]=='Q') return false; return true; } void snqHelp(vector<vector<string>> &res,vector<string> &v,int row,int n) { if(row==n) { res.push_back(v); return; } for(int col=0;col<n;++col) { if(isLegal(row,col,v,n)) { v[row][col]='Q'; snqHelp(res,v,row+1,n); v[row][col]='.'; } } } vector<vector<string>> solveNQueens(int n) { vector<vector<string>> res; vector<string> v(n,string(n,'.')); snqHelp(res,v,0,n); return res; } int main(int argc, char const *argv[]) { int n; cout<<"input n :"; cin>>n; vector<vector<string>> res=solveNQueens(n); for(auto vstr:res) { for(auto x:vstr) cout<<x<<endl; string line(2*n,'-'); cout<<line<<endl; } cout<<"Total solution :"<<res.size()<<endl; return 0; }
相关文章推荐
- n皇后问题的非递归迭代算法(C++实现)
- 回溯法求解 “n 皇后 问题”——Java 实现
- JAVA实现N皇后问题(回溯法)
- n-皇后问题 C++实现 回溯法
- 0/1背包问题 - 回溯法(C++实现)
- 实现n皇后问题(回溯法)
- 八(N)皇后问题的C++实现
- 通过8皇后问题浅析回溯法的递归实现
- n皇后问题回溯法用swift实现
- 【转】用c++实现的8皇后问题
- 8皇后问题(c++/python实现)
- N皇后问题(递归+回溯)的C++实现
- 经典算法---8皇后问题的C++实现
- 回溯法求解N皇后问题(Java实现)
- 8皇后问题Python与C++实现
- 八(N)皇后问题的C++实现
- N皇后问题-回溯与递归-C++实现
- N皇后问题的回溯法实现
- 拉丁矩阵问题 利用回溯法的C++实现方案
- C++实现 八皇后问题及其扩展N皇后问题(经典回溯算法)