#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++实现
原文作者:回溯法
原文地址: https://blog.csdn.net/gl486546/article/details/77804880
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/gl486546/article/details/77804880
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。