52. N-Queens II
来源:互联网 发布:工程动画软件 编辑:程序博客网 时间:2024/05/17 01:03
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
思路:此题虽然是N皇后问题的变体,但还是可以用N皇后的思路去解决,只是用了一个set来存储合法的皇后
bool isNQueens(vector<int>& res){ for (int i = 0; i < res.size(); i++){ for (int j = i + 1; j < res.size(); j++){ if (i - j == res[i] - res[j] || i - j == res[j] - res[i])return false; } } return true;}void dfs_SolveNQueens(vector<int>& res, int pos, set<vector<int>>& tt){ if (pos == res.size()){ if (isNQueens(res)){ tt.insert(res); } return; } for (int i = pos; i < res.size(); i++){ swap(res[i], res[pos]); dfs_SolveNQueens(res, pos + 1, tt); swap(res[i], res[pos]); }}int totalNQueens(int n){ if (n == 0)return 0; vector<int> temp; for (int i = 0; i < n; i++)temp.push_back(i); set<vector<int>> res; dfs_SolveNQueens(temp, 0, res); return res.size();}
思路1可能有重复的计算量
bool safe(vector<int>& res, int c){ for (int i = 0; i < c; i++){ if (res[i] == res[c] || abs(res[i] - res[c] == abs(i - c))) return false; } return true;}void dfs_SloveNQueens(int &cnt, vector<int>& res, int n, int c){ if (c == n){ cnt++; return; } for (res[c] = 0; res[c] < n; res[c]++){ if (safe(res, c))dfs_SloveNQueens(cnt, res, n, c + 1); }}int totalNQueens(int n){ vector<int> res(n); int cnt = 0; dfs_SloveNQueens(cnt, res, n, 0); return cnt;}
阅读全文
0 0
- 52.N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- JavaWeb学习十七(面向接口编程)
- 【FCN实践】03 训练
- Android UI 流畅度相关
- 2017年上海金马五校程序设计竞赛之—Sailing(优先队列+广搜)
- javascript继承
- 52. N-Queens II
- UCloud 的安全秘钥(简单)解题报告
- Testing your USB Webcam开摄像头
- MaBatis的模糊查询与存储过程
- 基础加强:类加载器 ---注解 ---动态代理(装饰设计模式)
- arcgis符号显示异常
- WPF渐变背景
- Flowerpot
- common strengths and weaknesses of symbolic execution