51. N 皇后(dfs+回溯)

本文介绍了如何利用深度优先搜索(DFS)和回溯法解决N皇后问题,确保皇后彼此不相互攻击。文章通过示例解释了问题背景,并详细阐述了解题思路,包括对横行、纵行和斜线的判断规则。最后给出了具体的DFS代码实现,强调了回溯过程的重要性。
摘要由CSDN通过智能技术生成

题目

n n n 皇后问题研究的是如何将 n n n 个皇后放置在 n × n n\times n n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

在这里插入图片描述

上图为 8 皇后问题的一种解法。

给定一个整数 n n n,返回所有不同的 n n n 皇后问题的解决方案。

每一种解法包含一个明确的 n n n 皇后问题的棋子放置方案,该方案中 'Q''.' 分别代表了皇后和空位。

示例:

输入:4
输出:[
 [".Q..",  // 解法 1
  "...Q",
  "Q...",
  "..Q."],
 ["..Q.",  // 解法 2
  "Q...",
  "...Q",
  ".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。

提示:

  • 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。

思路

适合采用dfs思路,对矩阵从上到下一层一层遍历,如果当前层找到符合条件的位置,则放入皇后并且到下一层继续查找,对于三种判断规则:

  1. 对于横行,由于采用dfs,所以同一行不可能放两个皇后;
  2. 对于纵行,定义一个 v[n] 数组,表示每一列皇后的数量ÿ
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值