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);
}
相关推荐
2601_951645747 小时前
C语言环境搭建指南
c语言·编译器·开发环境·helloworld·集成开发环境
SongYuLong的博客7 小时前
openWRT补丁文件生成
c语言
Jerryhut7 小时前
opencv对齐算法及其应用
人工智能·opencv·算法
果丁智能7 小时前
智慧校园一卡通深度融合方案:基于超级SIM卡的手机碰一碰智能开锁技术落地实践
数据结构·人工智能·python·科技·算法·智能家居·信息与通信
满怀冰雪7 小时前
第13篇-栈算法入门-括号匹配-表达式与单调栈基础
java·算法
TCW11218 小时前
AI底层系列:用C++实现线性代数的公式推导与算法设计-基础篇-5.矩阵方程
人工智能·线性代数·算法
叫我:松哥8 小时前
基于机器学习和flask的体育健身风险智能分析系统,系统集成DeepSeek、聚类算法、分类算法等,准确率达90%
人工智能·python·神经网络·算法·机器学习·flask·聚类
wabs6668 小时前
关于动态规划【0-1背包思想在实际问题中是怎么转化的?】
算法·动态规划
阿文的代码库8 小时前
欧拉回路与欧拉路径的算法流程演示
算法
汤姆yu8 小时前
云知声 U2 原生智能体大模型深度解析
大数据·人工智能·算法·ai·大模型·多模态·智能体