leetcode N-Queens
来源:互联网 发布:自学计算机游戏编程 编辑:程序博客网 时间:2024/06/13 22:45
任然是NP问题,解决此类问题主要思想就是递归,
就是用一个循环去枚举当前所有情况,然后把元素加入,递归,再把元素移除
代码1 提示 Output Limit Exceeded 输出结果中有重复的
class Solution {public: void solveNQueensHelper(vector<vector<string> > &result, vector<string> &tempResult, vector<bool> &flagRow, vector<bool> &flagCol, int &num, int n) { if(num==n) { result.push_back(tempResult); return ; } for(int i = 0; i < n; ++i) { if(flagRow[i]==false) continue; for(int j = 0; j < n; ++j) { if(flagCol[j]==false) continue;tempResult[i][j] = 'Q';flagRow[i] = false;flagCol[j] = false;num++;solveNQueensHelper(result, tempResult, flagRow, flagCol, num, n);num--;flagRow[i] = true;flagCol[j] = true;tempResult[i][j] = '.'; } } return ; } vector<vector<string> > solveNQueens(int n) { vector<vector<string> > result; if(n==0) return result; vector<bool> flagRow(n, true); vector<bool> flagCol(n, true); vector<string> tempResult; for(int i = 0; i < n; ++i) { string str = ""; for(int j = 0; j < n; ++j) str += '.'; tempResult.push_back(str); } int num = 0; solveNQueensHelper(result, tempResult, flagRow, flagCol, num, n); return result; }};
Accepted 代码 参考 http://www.cnblogs.com/TenosDoIt/p/3801621.html
class Solution {public: vector<vector<string> > solveNQueens(int n) { vector<vector<string> > result; if(n==0) return result; vector<int> state(n,-1); solveNQueensHelper(result, state, 0); return result; } void solveNQueensHelper(vector<vector<string> > &result, vector<int> &state, int row) { int n = state.size(); if(row==n) { vector<string> temp(n, string(n, '.')); for(int i = 0; i < n; ++i) { temp[i][state[i]] = 'Q'; } result.push_back(temp); return ; } for(int col = 0; col < n; ++col) { if(isValid(state, row, col)) { state[row] = col; solveNQueensHelper(result, state, row+1); state[row] = -1; } } return ; } bool isValid(vector<int> &state, int row, int col) { for(int i = 0; i < row; ++i) if(state[i]==col || abs(row - i) == abs(col - state[i])) 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
- OpenMP和MPI的区别(不断总结、汇总、更新中)
- 把两个排好序的数组,升序插入到另一个数组
- 表、触发器、事务、存储过程
- [LeetCode OJ]Linked List Cycle
- 基于事件的 JavaScript 编程:异步与同步
- leetcode N-Queens
- Android NDK调试出错Unknown Application ABI, Unable to detect application ABI's的解决方案
- SpringMVC查询返回集合,不能自定义字段对象的解决方法
- 为什么小电容通高频,大电容通低频
- 数据结构之广义表(头尾链表存储)基本操作
- NLog日志管理工具--入门实例
- hdu 1051 Wooden Sticks(贪心策略)
- Android Touch传递的一些简单规则
- Process.waitFor()的返回值含义