当前位置: 首页 > backend >正文

SCAU18124--N皇后问题

18124 N皇后问题

时间限制:5000MS  代码长度限制:10KB
提交次数:0 通过次数:0

题型: 编程题   语言: G++;GCC;VC

Description

有N*N的国际象棋棋盘,要求在上面放N个皇后,要求任意两个皇后不会互杀,有多少种不同的放法?



 

输入格式

每一个数为T,代表CASE的数量,T<=13
此后,每行一个数N(13>=N>0)


 

输出格式

每一个CASE,输出对应答案


 

输入样例

2
4
5


 

输出样例

2
10
回溯算法
#include <iostream>
#include <vector>
using namespace std;int totalSolutions = 0;void solveNQueens(int row, int n, vector<int>& col, vector<int>& diag1, vector<int>& diag2) {if (row == n) {totalSolutions++;return;}for (int c = 0; c < n; ++c) {if (!col[c] && !diag1[row + c] && !diag2[row - c + n - 1]) {col[c] = diag1[row + c] = diag2[row - c + n - 1] = 1;solveNQueens(row + 1, n, col, diag1, diag2);col[c] = diag1[row + c] = diag2[row - c + n - 1] = 0;}}
}int main() {int T;cin >> T;while (T--) {int n;cin >> n;totalSolutions = 0;vector<int> col(n, 0);//列vector<int> diag1(2 * n - 1, 0);//从左上到右下的对角线vector<int> diag2(2 * n - 1, 0);//从右上到左下的对角线solveNQueens(0, n, col, diag1, diag2);cout << totalSolutions << endl;}return 0;
}

在回溯算法中,我们使用两个数组 diag1 和 diag2 来标记对角线的占用情况:

  1. diag1[row + col]

    • 表示副对角线(因为 row + col 是副对角线的唯一标识)。

    • 大小为 2n - 1(因为 row + col 的取值范围是 [0, 2n-2])。

  2. diag2[row - col + n - 1]

    • 表示主对角线(通过 row - col + n - 1 将负值映射到正索引)。

    • 大小为 2n - 1(因为 row - col 的取值范围是 [-(n-1), n-1])。

示例(N=4)

  • 主对角线 row - col 的可能值:-3, -2, -1, 0, 1, 2, 3。

    • 通过 row - col + 3 映射为索引:0, 1, 2, 3, 4, 5, 6。

  • 副对角线 row + col 的可能值:0, 1, 2, 3, 4, 5, 6(直接作为索引)。

http://www.xdnf.cn/news/3793.html

相关文章:

  • 基于Vue2 + Element 实现任务列表管理功能的详细教程
  • tp5 php获取农历年月日干支甲午
  • MCP协议的使用分享
  • 数据库=====
  • 2025 年最新 Python 语言实现网易企业邮箱邮件推送验证码详细教程(更新中)
  • 智能决策支持系统的基本概念与理论体系
  • Ubuntu下安装Node.js
  • 【java八股文】深入浅出synchronized优化原理
  • 嵌入式Linux应用项目----智能网关
  • Docker Compose:服务编排:批量管理多个容器
  • 《Java高级编程:从原理到实战 - 进阶知识篇四》
  • 利用Elixir中的原子特性 + 错误消息泄露 -- Atom Bomb
  • 深度思考Qwen3
  • MySQL 中日期相减的完整指南
  • # 基于词袋模型(BoW)的猫狗图像分类实践
  • vue的diff算法是什么、比较方式,原理分析、示例解释讲解
  • 迭代器的思想和实现细节
  • 【序列化与反序列化详解】
  • 【漫话机器学习系列】237. TSS总平方和
  • 【2025软考高级架构师】——未来信息综合技术(11)
  • C++笔记-多态(包含虚函数,纯虚函数和虚函数表等)
  • 在MySQL中建索引时需要注意哪些事项?
  • Vue3源码学习5-不使用 `const enum` 的原因
  • 普推知产:图形商标通过初审,图形商标申请时注意!
  • 【深度学习】典型的 CNN 网络
  • Linux第20节 --- inode和文件系统
  • qsort函数的用法
  • MySQL 日期加减函数详解
  • 61常用控件_QDateTimeEdit的使用
  • 用Maven定位和解决依赖冲突