Question:
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
Anwser 1: O(n^3) based-on Row
class Solution {
public:
bool check(int row, int* colArray) {
for (int i = 0; i < row; ++i)
{
int diff = abs(colArray[i] - colArray[row]); // in a col
if (diff == 0 || diff == row - i) { // int a row or line
return false;
}
}
return true;
}
void placeQueens(int row, int n, int &count, int* colArray) {
if (row == n) {
++count;
return;
}
for (int col = 0; col < n; ++col) { // in 0 row, test n col
colArray[row] = col;
if (check(row, colArray)){
placeQueens(row+1, n, count, colArray); // test other rows
}
}
}
int totalNQueens(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int *colArray = new int[n];
int count = 0;
placeQueens(0, n, count, colArray);
return count;
}
};
Anwser 2:O(n^3) based-on Col
class Solution {
public:
bool check(int col, int *rowArray){
for(int i = 0; i < col; i++){
if(rowArray[i] == rowArray[col] || abs(rowArray[i] - rowArray[col]) == col - i)
return false;
}
return true;
}
void placeQueens(int col, int n, int &count, int *rowArray){
if(col == n){
count++;
return;
}
for(int row = 0; row < n; row++){
rowArray[col] = row;
if(check(col, rowArray)){
placeQueens(col+1, n, count, rowArray);
}
}
}
int totalNQueens(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int *rowArray = new int[n];
int count = 0;
placeQueens(0, n, count, rowArray);
return count;
}
};
Anwser 3:O(n^3) while
bool check(int row, int* colArray) {
for (int i = 0; i < row; ++i)
{
int diff = abs(colArray[i] - colArray[row]); // in a col
if (diff == 0 || diff == row - i) { // int a row or line
return false;
}
}
return true;
}
int totalNQueens(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(n == 1) return 1;
int *colArray = new int[n+1];
int count = 0;
colArray[1] = 0;
int k = 1;
while(k > 0){
colArray[k] += 1;
while( (colArray[k] <= n) && !check(k, colArray) ){
colArray[k]++;
}
if(colArray[k] <= n){
if(k == n){
count++;
} else {
colArray[++k] = 0;
}
} else {
k--;
}
}
return count;
}
More Code: g++
n-queue.c
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <math.h>
bool check(int row, int* colArray) {
for (int i = 0; i < row; ++i)
{
int diff = abs(colArray[i] - colArray[row]);
if (diff == 0 || diff == row - i) {
return false;
}
}
return true;
}
int totalNQueens(int n) {
if(n == 1) return 1;
int *colArray = new int[n+1];
int count = 0;
colArray[1] = 0;
int k = 1;
while(k > 0){
colArray[k] += 1;
while( (colArray[k] <= n) && !check(k, colArray) ){
colArray[k]++;
}
if(colArray[k] <= n){
if(k == n){
count++;
} else {
colArray[++k] = 0;
}
} else {
k--;
}
}
printf("%d\t%d\n", n, count);
return count;
}
int main(){
int num = 16;
for(int i = 0; i < num; i++){
totalNQueens(i);
}
return 0;
}
cmd:g++ -g n-queue.c -o n-queue && ./n-queue
Result:
0 1
1 1
2 0
3 0
4 2
5 10
6 4
7 40
8 92
9 352
10 724
11 2680
12 14200
13 73712
14 365596
15 2279184
参考推荐:
N皇后问题
LeetCode题目:N-Queens
分享到:
相关推荐
js js_leetcode题解之52-n-queens-II.js
js js_leetcode题解之51-n-queens.js
leetcode 71 Python用 Python 编写 Leetcode (数据科学家的解决方案) - 易于理解的最佳解决方案,可以通过所有 Leetcode 测试用例,对于非 ...leetcode ...leetcode ...N-Queens (HARD) Leetcode 52. N-
leetcode 分类 LeetCode Progress 128/154 Other Solutions C++,有详细思路解释 python,部分有解释 Java,部分有解释 ...norvig神牛Python代码写的很飘逸,果然是有LISP...N-Queens N-Queens II Balanced Binary Tree Binar
leetcode 530 力码练习 前 250 个问题 1 二和 :check_mark: 3 无重复字符的最长子串 :check_mark: 4 两个有序数组的中位数 5 最长回文子串 7 反转整数 8 字符串到整数 (atoi) 10 正则表达式匹配 11 盛水的容器 12 ...
051:N-Queens 052:N-Queens II 071: Letter Combinations of a Phone Number 093:Restore IP Addresses 树的遍历问题也可以用这种思想来解释。只不过是特殊的递归而已。(只有两路,不用循环) 题型二:动态规划...
leetcode ...N-Queens II 最大子阵列 螺旋矩阵 跳跃游戏 合并间隔 插入间隔 螺旋矩阵 II 排列顺序(无法访问文章) 61-70 轮换名单 独特的路径 独特的路径 II 最小路径和(无法访问文章) 有效号码 加一
leetcode 推开箱子进深 Leetcode-May-Challenge-2021 它包含 Leetcode May Challenge 2021 的解决方案 比赛链接: 问题 问题名称 点击打开问题 无向图中的连通分量数 ...N-皇后 ...N-Queens II 最大差距 搜索建议系统
leetcode怎么销号 LeetCode-Solutions :green_heart:My ...N-Queens Hard 回溯 0053 Maximum Subarray Easy 动态规划 0069 Sqrt(x) Easy 二分、牛顿迭代 0070 Climbing Stairs Easy 动态规划 0075 Sort Colors M
leetcode ...NQueens * 回溯法- 网易2017算法工程师笔试题3 * 贪心法- Dijkstra算法 ShortestDistanceAlgorithm * 动态规划- Floyd最短路径算法 ShortestDistanceAlgorithm * 动态规划- 最长公共子序列 ...
N-Queens II 平衡二叉树 二叉树中序遍历 二叉树最大路径和 将排序数组转换为二叉搜索树 将排序列表转换为二叉搜索树 将二叉树展平到链表 二叉树的最大深度 二叉树的最小深度 路径和 排列 排列二 在每个节点中填充下...
leetcode中国力码 我的 Leetcode 生活经历! 我创建了这个存储库来分享我对 leetcode 问题的解决方案。 另外,我会补充一下我在解决问题时的想法,也会补充一些简单的测试用例以供...N-Queens(硬) 56. 合并间隔(中)
leetcode 530 leetcode 我对 leetcode 的解决方案。 使用c++解决问题。 # 标题 解决方案 标签 方法 1185 一周中的天 大批 5499 检测长度模式重复 k 次或多次 大批 ...n-queens-ii DFS,搜索 1003 替
- N-Queens / N-Queens II: 第一个问题是经典的N皇后问题,要求在一个N×N的棋盘上放置N个皇后,使得它们互不攻击;第二个问题则是对第一个问题的求解数的计数。 - Maximum Subarray: 寻找一个整数数组中,连续子...
N-Queens 572 另一棵树的子树98 验证二叉搜索树1048 最长的字符串链101 对称树第151话第177话218 天际线问题242 有效字谜378 排序矩阵中的第 K 个最小元素第489章 扫地机器人406按高度重构队列592 分数加减法920 ...
1. 回溯法:中等难度题目中,回溯法是一种常见的解决方案,如"Combination Sum"(组合总和)和"N-Queens"(皇后问题),通过回溯可以找到所有可能的解。 2. 动态规划:"House Robber"(打家劫舍)系列问题,展示了...
比如n-queens-ii对应链接为: 题目 url add-two-numbers find-peak-element longest-common-subsequence longest-consecutive-sequence max-area-of-island next-greater-element-ii serialize-and-deserialize-...
- **回溯法**:尝试所有可能的解决方案,如八皇后问题、N-Queens、排列组合等。 - **分治法**:将问题分解为较小的子问题,如快速排序、归并排序、大整数乘法等。 - **递归**:函数自我调用,解决树形结构或多...
5. 回溯法:在解决如“N-Queens”(八皇后问题)或“Combination Sum”(组合总和)等问题时,回溯法是一种有效的策略。 三、编程语言应用 CodeBase项目支持多种编程语言,包括但不限于Java、Python、C++和...
leetcode 棋盘算法实现 有趣的算法或有趣的算法实现 动态规划(非常基础)/递归 ...nQueens.py 很少包含外部库,所以下面的就可以了。 编译任何 C 程序: gcc -o X Xc 执行 python 脚本: chmod 755 X.py --> ./X.py