leetcode 51. N-Queens
来源:互联网 发布:淘宝怎么设计 编辑:程序博客网 时间:2024/05/03 21:22
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens' placement, where 'Q'
and '.'
both indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."]]
这个哥以前就解过了,大概一年前吧,偷懒了,直接粘过来了。
typedef unsigned char BYTE;class Solution {int N;vector<vector<BYTE>> chess_board;deque<deque<BYTE>>record, solution;deque<BYTE>cc;deque<BYTE>bb;bool update(int height){cc.clear();chess_board[height][bb[height]] = 1;for (int i = 0; i < N; i++){chess_board[height][i] = 1;chess_board[i][bb[height]] = 1;if (height - bb[height] + i >= 0 && height - bb[height] + i <= N - 1)chess_board[height - bb[height] + i][i] = 1;if (height + bb[height] - i >= 0 && height + bb[height] - i <= N - 1)//右上左下 chess_board[height + bb[height] - i][i] = 1;}for (int i = 0; i < N; i++)if (chess_board[height + 1][i] == 0)cc.push_back(i);if (!cc.empty())return true;return false;}void eight_queen(){for (int i = 0; i < N; i++)bb.push_back(i);record.push_back(bb);bb.clear();int k = 0;while (k < N){if (!record.empty()){if (record[k].empty()){while (record[k].empty()){record.pop_back();if (record.empty())return;bb.pop_back();k--;}for (int i = 0; i < N; i++)for (int j = 0; j < N; j++)chess_board[i][j] = 0;for (int i = 0; i < k; i++)update(i);}bb.push_back(record[k][0]);record[k].pop_front();}if (!update(k)){while (!update(k)){if (record[k].empty()){while (record[k].empty()){record.pop_back();if (record.empty())return;k--;for (int i = 0; i < N; i++)for (int j = 0; j < N; j++)chess_board[i][j] = 0;for (int i = 0; i < k; i++)update(i);bb.pop_back();}bb.pop_back();break;}else{bb[k] = record[k][0];record[k].pop_front();for (int i = 0; i < N; i++)for (int j = 0; j < N; j++)chess_board[i][j] = 0;for (int i = 0; i < k; i++)update(i);if (update(k)){if (k == N - 2){deque<BYTE> dd;dd = bb;dd.push_back(0);for (int i = 0; i < cc.size(); i++){dd[N - 1] = cc[i];solution.push_back(dd);}bb.pop_back();for (int i = 0; i < N; i++)for (int j = 0; j < N; j++)chess_board[i][j] = 0;for (int i = 0; i < k; i++)update(i);}else{record.push_back(cc);k++;}break;}}}}else{if (k == N - 2){deque<BYTE> dd;dd = bb;dd.push_back(0);for (int i = 0; i < cc.size(); i++){dd[N - 1] = cc[i];solution.push_back(dd);}bb.pop_back();for (int i = 0; i < N; i++)for (int j = 0; j < N; j++)chess_board[i][j] = 0;for (int i = 0; i < k; i++)update(i);}else{record.push_back(cc);k++;}}}}public:vector<vector<string>> solveNQueens(int n) {vector<vector<string>>re;if (n == 1){vector<string>v;v.push_back("Q");re.push_back(v);return re;}N = n;chess_board.resize(N);for (int i = 0; i < N; i++)chess_board[i].resize(N);eight_queen();string s = string(N, '.');vector<string> ss(N, s);for (int i = 0; i < solution.size(); i++){vector<string>aa = ss;for (int j = 0; j < N; j++)aa[j][solution[i][j]] = 'Q';re.push_back(aa);}return re;}};
accept
后面52. N-Queens II返回size大小就行了,一样AC
0 0
- LeetCode 51. N-Queens
- LeetCode --- 51. N-Queens
- LeetCode 51.N-Queens
- [Leetcode] 51. N-Queens
- [leetcode] 51.N-Queens
- [leetcode] 51. N-Queens
- LeetCode 51. N-Queens
- leetcode 51. N-Queens
- 【LeetCode】51. N-Queens
- leetcode 51. N-Queens
- LeetCode 51. N-Queens
- LeetCode 51. N-Queens
- leetcode.51. N-Queens
- Leetcode 51. N-Queens
- LeetCode 51. N-Queens
- [LeetCode] 51. N-Queens
- leetcode 51. N-Queens
- leetcode-51. N-Queens
- java 对象与内存
- 找圆算法((HoughCircles)总结与优化
- 文件下载
- SQL 获取IP
- MySQL基本数据类型
- leetcode 51. N-Queens
- 找一个字符串中第一个非重复的字符
- 比较kmalloc/vmalloc/get_free_pages
- 使用 QEMU 进行系统仿真
- Lwip之IP/MAC地址冲突检测
- 伪数组与伪数组转化为数组
- 浮躁_该怎么平息?
- 46、外部调用内部类的方法
- 一个点绕另一个点旋转a度 问题