LeetCode第51题之 N-Queens
来源:互联网 发布:入骨相思知不知剧透 编辑:程序博客网 时间:2024/06/08 08:31
思路主要是参考我以前的一篇博客:8皇后问题的两种解法,那篇博客思路写的还比较详细,建议看那篇博客。这里我只用第一种解法实现该题。
下面给出C++源代码:
#include <iostream>#include <string>#include <vector>using namespace std;class Solution {public: //检查在第k个位置的皇后是否与前k-1个皇后冲突 bool check(vector<int> &v, int k) { for (int i=0;i<k;++i) { if (v[k] == v[i] || abs(v[i]-v[k]) == abs(i-k)) { return true; } } return false; } // void backdate(vector<int> &v,int n, int k, vector<vector<string>> &res) { for (int i=0;i<n;++i) { //第k行放第i个皇后 v[k] = i; //如果没有冲突 if (!check(v, k)) { if(n-1 == k) { //保存结果 vector<string> method; string s_tmp(n, '.'); for (int i=0;i<n;++i) { //将皇后所在的位置‘Q’ s_tmp[v[i]] = 'Q'; method.push_back(s_tmp); //重新复位 s_tmp[v[i]] = '.'; } res.push_back(method); break; } else { //递归 backdate(v, n, k+1, res); } } } //如果有冲突,或者回溯回来时 v[k] = -1; } vector<vector<string>> solveNQueens(int n) { //res保存结果 vector<vector<string>> res; //v[i]表示第i行放第v[i]个位置放皇后 vector<int> v(n, -1); backdate(v, n, 0, res); return res; }};int main(){ Solution s; vector<vector<string>> res = s.solveNQueens(5); for (vector<vector<string>>::iterator ita=res.begin();ita!=res.end();++ita) { for (vector<string>::iterator itb=ita->begin();itb!=ita->end();++itb) { cout<<*itb<<endl; } cout<<endl; } return 0;}
0 0
- LeetCode第51题之 N-Queens
- LeetCode之N-Queens
- [leetcode 51] N-Queens
- LeetCode(51) N-Queens
- leetcode-51-N-Queens
- leetcode 51: N-Queens
- LeetCode 51: N-Queens
- LeetCode 51 - N-Queens
- Leetcode 51 N-Queens
- LeetCode 51 N-Queens
- leetcode(51):N-Queens
- LeetCode 51 N-Queens
- Leetcode 51 N-Queens
- LeetCode 51 N-Queens II
- [leetcode-51]N-Queens(java)
- LeetCode(51) N-Queens
- LeetCode 51 - N-Queens II
- LeetCode-51&52.N-Queens
- 帆软报表与SQL语句
- Git基本操作
- String和StringBuffer区别。
- Intent
- C语言基础 for循环遍历一维整型数组
- LeetCode第51题之 N-Queens
- <marquee>详细属性
- QLineEdit
- 项目实践:学生成绩管理
- hdu 2602 (01背包入门)
- 关于我的第一个项目的登陆模块心得
- 二维码的扫描与制作
- React Native控件之ScrollView组件详解
- Linux系统Centos以及Ubuntu下安装新的python版本