LeetCode第51题之 N-Queens
2016-06-25 13:09
435 查看
思路主要是参考我以前的一篇博客:8皇后问题的两种解法,那篇博客思路写的还比较详细,建议看那篇博客。这里我只用第一种解法实现该题。
下面给出C++源代码:
下面给出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; }
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解