LeetCode: N-Queens
来源:互联网 发布:她和他马克李维 知乎 编辑:程序博客网 时间:2024/06/02 02:59
题目链接:https://leetcode.com/problems/n-queens/#/description
这是十分经典的八皇后问题的变形,以八皇后问题为例,在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; }};
阅读全文
0 0
- 【LeetCode】N-Queens && N-Queens II
- leetcode N-Queens & N-Queens II
- Leetcode: N-Queens && N-Queens II
- 【Leetcode】【python】N-Queens/N-Queens II
- LeetCode: N-Queens II
- LeetCode: N-Queens
- LeetCode : N-Queens
- LeetCode : N-Queens II
- [Leetcode] N-Queens II
- leetcode 72: N-Queens
- LeetCode 38: N-Queens
- 【leetcode】N-Queens II
- 【leetcode】N-Queens
- LeetCode: N Queens II
- [LeetCode]N-Queens
- [LeetCode]N-Queens II
- [leetcode]N-Queens
- [LeetCode] Anagrams、N-Queens
- 43907 GPIO
- ffmpeg相关开源项目
- 如何调整Linux内核启动中的驱动初始化顺序
- HDFS socket timeout时间设置
- CentOS 7关闭firewall使用iptables 并打开3306端口
- LeetCode: N-Queens
- 每日AC-小米笔试 风口的猪-中国牛市
- he superclass javax.servlet.http.HttpServlet was not found on the Java Build Path
- 利用rownum实现分页
- Java Top 100 热门问答 (Stackoverflow)
- Spring集成Memcached与Memcached API
- 【面试题15】链表中倒数第K个结点
- asdf
- Unity移动端动态阴影总结