LeetCode: N-Queens
2017-06-12 10:09
323 查看
题目链接:https://leetcode.com/problems/n-queens/#/description
这是十分经典的八皇后问题的变形,以八皇后问题为例,在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。方法: 回溯法。
代码:
这是十分经典的八皇后问题的变形,以八皇后问题为例,在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。方法: 回溯法。
代码:
class Solution { int *x; public: vector<vector<string> > solveNQueens(int n) { vector<vector<int> > result_int; vector<vector<string> > result; vector<int> temp; x = new int[n+1]; for(int i =0; i<n; i++) x[i] = 0; n_queen(n, 1, result_int); // for(int i =0; i<n; i++) cout<<x[i]; for(vector<vector<int> >::iterator begin_2 = result_int.begin(); begin_2 != result_int.end(); begin_2++){ temp = *(begin_2); for(vector<int>::iterator begin_1 = temp.begin(); begin_1 != temp.end(); begin_1++){ // cout<<*begin_1<<endl; } } convert(result_int, result,n); return result; } void convert(vector<vector<int> > &vec_int, vector<vector<string> > &vec_str,int n){ vector<int> temp; vector<string> temp_str; string str(n,'.'); // cout<<str; string strr; for(vector<vector<int> >::iterator begin_2 = vec_int.begin(); begin_2 != vec_int.end(); begin_2++){ temp = *(begin_2); for(vector<int>::iterator begin_1 = temp.begin(); begin_1 != temp.end(); begin_1++){ str.assign(n, '.'); str[*begin_1-1] = 'Q'; temp_str.push_back(str); // if((begin_1+1) == temp.end()) {strr+= str; str.assign(vec_int.size(), '.'); } // else {strr+= (str+'.'); str.assign(vec_int.size(), '.'); }; } vec_str.push_back(temp_str); temp_str.clear(); } return ; } void n_queen(int n, int k, vector<vector<int> > &result){ if(k > n){ vector<int> vec; for(int i=1; i<=n; i++){ // cout<<x[i]; vec.push_back(x[i]); } // cout<<endl; result.push_back(vec); } else { for(int i=1; i<=n; i++){ x[k] = i; if(legal(k)) n_queen(n,k+1, result); } } } bool legal(int k){ for(int i=1; i<k; i++){ if((abs(x[i]-x[k]) == abs(i - k)) || x[i] == x[k] ) return false; } return true; } };
相关文章推荐
- leetcode 72: N-Queens
- leetcode N-Queens
- [Leetcode] N-Queens
- leetcode笔记:N-Queens
- leetcode-51-N-Queens
- LeetCode N-Queens
- [LeetCode] N-Queens
- leetcode n-queens
- LeetCode之N-Queens
- Leetcode---N-Queens
- LeetCode---N-Queens
- LeetCode---N-Queens
- leetcode 51. N-Queens
- leetcode:N-Queens (n皇后问题) 【面试算法题】
- leetcode — n-queens
- LeetCode-N-Queens
- LeetCode : N-Queens
- N-Queens -- LeetCode
- 2017.11.8 LeetCode N皇后问题 - 51. N-Queens - 52....
- LeetCode 51. N-Queens