可视化讲解:什么是八皇后问题?前言概念介绍原理讲解效

前言

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

概念介绍

1. 八皇后问题起源

  • 八皇后问题(英文:Eight queens),是由国际西洋棋棋手马克斯·贝瑟尔于1848年提出的问题,是回溯算法的典型案例。
  • 问题描述:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角斜线上。
  • 请问一共有多少种摆法?

原理讲解

  • 由于篇幅限制,我们将八皇后问题简化为4皇后问题来讲解其原理(八皇后问题和4皇后问题的原理是一致的)
  1. 第一步,我们从第一行开始,遍历第一行中所有的列,找到第一个适合放置皇后的位置。皇后位置用黑色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 由于任意两个皇后不得处在同一行、同一列或者同一对角斜线上。所以第1个皇后所在的行、列和对角线上的位置都是危险位置,不能再放置第2个皇后。危险位置我们用红色背景表示,安全位置我们用绿色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 第二步,我们从第二行开始,遍历第二行中所有的列,在安全位置范围内找到第一个适合放置皇后的位置。皇后位置用黑色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 由于任意两个皇后不得处在同一行、同一列或者同一对角斜线上。所以第2个皇后所在的行、列和对角线上的位置都是危险位置,不能再放置第3个皇后。危险位置我们用红色背景表示,安全位置我们用绿色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 第三步,我们从第三行开始,遍历第三行中所有的列,在安全位置范围内找到第一个适合放置皇后的位置。由于在第三行找不到放置皇后的位置,所以我们进行回退,重新放置第2个皇后的位置。此时效果如下图所示

在这里插入图片描述

  1. 由于任意两个皇后不得处在同一行、同一列或者同一对角斜线上。所以第2个皇后所在的行、列和对角线上的位置都是危险位置,不能再放置第3个皇后。危险位置我们用红色背景表示,安全位置我们用绿色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 第四步,我们从第三行开始,遍历第三行中所有的列,在安全位置范围内找到第一个适合放置皇后的位置。皇后位置用黑色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 由于任意两个皇后不得处在同一行、同一列或者同一对角斜线上。所以第3个皇后所在的行、列和对角线上的位置都是危险位置,不能再放置第4个皇后。危险位置我们用红色背景表示,安全位置我们用绿色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 第五步,我们从第四行开始,遍历第四行中所有的列,在安全位置范围内找到第一个适合放置皇后的位置。由于在第四行找不到放置皇后的位置,所以我们进行回退。由于第2个,第3个皇后已经没有可选的位置,所以我们重新放置第1个皇后的位置。此时效果如下图所示

在这里插入图片描述

  1. 由于任意两个皇后不得处在同一行、同一列或者同一对角斜线上。所以第1个皇后所在的行、列和对角线上的位置都是危险位置,不能再放置第2个皇后。危险位置我们用红色背景表示,安全位置我们用绿色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 第六步,我们从第二行开始,遍历第二行中所有的列,在安全位置范围内找到第一个适合放置皇后的位置。皇后位置用黑色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 由于任意两个皇后不得处在同一行、同一列或者同一对角斜线上。所以第2个皇后所在的行、列和对角线上的位置都是危险位置,不能再放置第3个皇后。危险位置我们用红色背景表示,安全位置我们用绿色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 第七步,我们从第三行开始,遍历第三行中所有的列,在安全位置范围内找到第一个适合放置皇后的位置。皇后位置用黑色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 由于任意两个皇后不得处在同一行、同一列或者同一对角斜线上。所以第3个皇后所在的行、列和对角线上的位置都是危险位置,不能再放置第4个皇后。危险位置我们用红色背景表示,安全位置我们用绿色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 第八步,我们从第四行开始,遍历第四行中所有的列,在安全位置范围内找到第一个适合放置皇后的位置。皇后位置用黑色背景表示。此时效果如下图所示

在这里插入图片描述

  1. 至此,我们已经成功的在4×4的象棋上摆放四个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角斜线上。当然这只是其中一种解法,还有另一种解法。留着读者自行研究。

效果展示

在这里插入图片描述

更多算法学习请关注我的公众号

说明

  • 在公众号中回复“算法源码”即可获取十大经典算法源码
  • 在公众号中回复“算法书籍”即可获取经典入门算法书籍
  • 在公众号中回复“数据结构”即可获取数据结构相关源码