N-Queens II 经典问题:8皇后问题 题解

题目

上一篇我们使用了回溯法,然而提到回溯法就不得不提一个1848年提出的经典题目:8皇后问题,这个问题描述非常简单,一个8*8的棋盘上,放置8个皇后,使得每个皇后都不行相互攻击,既每个皇后的所在行、所在列、所在斜线上都不能有其他皇后,问有多少种解法,题目初看非常像图论问题,实际上也确实是,对图论感兴趣的同学可以去看离散数学的相关内容,这里我们用一种更巧妙也更直观的方法来解决这个问题,那就是——回溯法
在这道经典题目和后面的几篇微博所讨论的题目,我们可以感受到回溯法在解决一些限定某些条件求解(求路径)的问题上是一个多么万能又精巧的的算法
题目:
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Nqueens
return the total number of distinct solutions.

Difficulty: Hard

分析:

题目没有局限于8皇后而是进行了延伸,扩展到n皇后,实际上原理是一模一样的
初看题目可能没有头绪,想到回溯法却不知道切入点在哪,实际上,对于回溯法问题,无非是给定的“图”和限定条件:
这里写图片描述

这里图就是一个n*n的方格,我们先抽象成一个n*n的矩阵,用二维数组代替,皇后可以抽象为矩阵中的元素,用二维数组中的元素代替,不妨设0是没有放皇后,1是放了皇后
限定条件既矩阵中的元素互相不在同一行同一列同一斜线,转化为二维数组后我们发现对于不同行不同列是很好判断的,比如,方格坐标为(i,j),只要在决定一个方格放不放皇后的时候检查第i行第j列是否有其他皇后就可以,斜线似乎有点棘手,实际上我们抽象出两个皇后就可以看出来解决方案:

这里写图片描述

看看这两条线,假设方程分别为: y=kx+b; 其中 A(x

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值