LeetCode //C - 52. N-Queens II

52. N-Queens II

The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other.

Given an integer n , return the number of distinct solutions to the n-queens puzzle.

Example 1:

Input: n = 4
Output: 2
Explanation: There are two distinct solutions to the 4-queens puzzle as shown.

Example 2:

Input: n = 1
Output: 1

Constraints:
  • 1 <= n <= 9

From: LeetCode

Link: 52. N-Queens II


Solution:

Ideas:
  1. Start in the leftmost column.
  2. If all queens are placed, return true.
  3. Try all rows in the current column.
  • If the queen can be placed safely in this row, mark this cell and place the queen.
  • Recur to place the rest of the queens.
  • If placing the queen in the current row and proceeding to place the next queen leads to a solution, return true.
  • If placing the queen doesn't lead to a solution, then unmark this cell, backtrack, and go to the next row in the current column.
  1. If all rows have been tried and none worked, return false to trigger backtracking.

To determine if a queen can be placed safely, we need to check three things:

  1. There's no queen in the same row.
  2. There's no queen in the same diagonal (both left upper diagonal and right upper diagonal).
Code:
c 复制代码
bool isSafe(int board[], int row, int col, int n) {
    for (int i = 0; i < col; i++) {
        if (board[i] == row || 
            board[i] - i == row - col || 
            board[i] + i == row + col) {
            return false;
        }
    }
    return true;
}

int solveNQueensUtil(int n, int col, int board[]) {
    if (col >= n) {
        return 1;
    }
    int count = 0;
    for (int i = 0; i < n; i++) {
        if (isSafe(board, i, col, n)) {
            board[col] = i;
            count += solveNQueensUtil(n, col + 1, board);
        }
    }
    return count;
}

int totalNQueens(int n) {
    int board[n];
    for (int i = 0; i < n; i++) {
        board[i] = 0;
    }
    return solveNQueensUtil(n, 0, board);
}
相关推荐
小婷一直在努力22 分钟前
自定义类型:联合和枚举
c语言·联合和枚举
皓月斯语24 分钟前
B2132 素数对
c++·算法·题解
weixin_456808381 小时前
【沁恒蓝牙开发】BLE常见错误码与解析
c语言·单片机·嵌入式硬件
星轨初途1 小时前
LeetCode 热题 100——day2 字母异位词分组
c++·算法·leetcode
happyprince1 小时前
篇1:整体观 · bitsandbytes项目全貌解读
人工智能·算法
HJX_07241 小时前
嵌入式软件C语言八股文复习笔记5——编译、链接与底层硬核机制
c语言·开发语言·笔记
青梅橘子皮2 小时前
STL---map/set... “家族“详解(从使用到底层)(1)
数据结构·算法
让学习成为一种生活方式2 小时前
DNA 甲基化综述(模式、调控与功能)--Current Opinion in Plant Biology
算法
-森屿安年-2 小时前
647. 回文子串
c++·算法·动态规划
haolin123.3 小时前
类和对象(下)
c语言·开发语言·c++