DFS&BFS - 52. N-Queens II
时间:2022-07-25
本文章向大家介绍DFS&BFS - 52. N-Queens II,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
52. N-Queens II
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 the number of distinct solutions to the n-queens puzzle.
Example:
Input: 4
Output: 2
Explanation: There are two distinct solutions to the 4-queens puzzle as shown below.
[
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."],
["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
思路:
这一题n皇后与51题区别是只用求出组合种数,而51题要求输出所有结果,做法是一样,都是dfs递归回溯,使用列和对角线是否能摆放皇后来剪枝。
代码:
go:
var col, dia1, dia2 []bool
func totalNQueens(n int) int {
var res int
col = make([]bool, n)
dia1 = make([]bool, 2*n-1)
dia2 = make([]bool, 2*n-1)
putQueen(n, 0, []int{}, &res)
return res
}
// 尝试在一个n皇后问题中,摆放第index行的皇后位置
func putQueen(n int, index int, row []int, res *int) {
if index == n {
*res++
return
}
for i := 0; i < n; i++ {
if !col[i] && !dia1[index+i] && !dia2[index-i+n-1] { // 对应列、对角线、反对角线没有皇后
row = append(row, i)
col[i] = true
dia1[index+i] = true
dia2[index-i+n-1] = true
// 尝试在index + 1 摆放皇后
putQueen(n, index+1, row, res)
col[i] = false
dia1[index+i] = false
dia2[index-i+n-1] = false
row = row[:len(row)-1]
}
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ROS机器人URDF建模
- 这是我见过最牛逼的Shell,619行代码!
- 设计模式(五):利用原型模式复制几个葫芦娃
- Vue中数组变动监听
- which命令
- 如何将tensorflow1.x代码改写为pytorch代码(以图注意力网络(GAT)为例)
- tomcat设置好环境变量,依然无法通过cmd startup命令启动
- python调用百度图片识别api
- [Go]GO语言实战-开源WEB客服GO-FLY-gorm下分页的实现
- [Go]GO语言实战-小程序或公众号接口gin框架验证微信服务器消息签名-开源WEB客服
- php一步一步实现mysql协议(一)——抓包本地mysql通信
- [MySQL] 利用explain查看sql语句中使用的哪个索引
- php一步一步实现mysql协议(二) ——握手初始化
- php一步一步实现mysql协议(三) ——登录认证密码加密
- php一步一步实现mysql协议(四)——执行命令