八皇后问题的解析与实现

问题描述

八皇后问题是一个古老而又著名的问题。

时间退回到1848年,国际西洋棋棋手马克斯·贝瑟尔提出了这样的一个问题:

在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问一共有多少种摆法。

如何找到这所有的摆法?

如何解这道题

现在,我们假设自己坐在一个国际象棋棋盘面前,手上有八个皇后作为棋子,尝试解决找到这个问题的一个解。我们用这样的步骤去尝试:
1、先在第一排摆放一个皇后
2、再在第二排找到一个可以摆放皇后的位置
3、如此方法一直摆到最后一排。(当然,如果顺利的话)
4、如果发现没有合适的位置,摆放下一个皇后,我们就调整之前的一个皇后的位置,再尝试摆下一个。如果依然无法找到,就多往回调整一个。
通过这样的过程,我们一定可以找到所有的八皇后的摆放位置。

为什么要考这个问题

是的,八皇后问题已经基本作为大学教递归的必学问题出现了。会做这个问题可以被视为一个基本素质,那么面试的时候使用这个问题面试官到底想知道什么呢?

  1. 知道这个问题的解,在一定程度上说明基础知识覆盖到了这个面。当然了,还要看你是背的答案还是能解决这个类问题,这也是面试过程中的重点之一。
  2. 递归思想的掌握。在我们上面的解题描述中,其实并没有提到“递归”这个概念。但是,实际上是,第二个皇后的摆放是在第一个皇后摆好的基础上完成的,以此类推,第八个皇后的摆放是在第七个皇后摆好的基础上完成的。也就是我们在解题的过程中,只需要关注摆放好下一个皇后,以及什么时候是得到了一个解。
  3. 总结问题中的本质或者说规律。这是算法面试题的统一问题,但是规律千千万,被隐藏在各种表象之下。我们作为工程师,就是要实现本质,解决表象问题。

如何把这个代码写出来
八皇后的问题描述虽然看上去规则明确,但是,如果直接写代码的话我们会发现无从下手。这是因为我们需要将问题转化为数学问题,才能使用代码来解决。这也永远是一个问题使用计算机程序解决的最关键的第一步。
转化为数学问题

  • 一个88的棋盘,我们可以使用一个长度为88的二维数组表示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/106306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【基础篇】四、本地部署Flink

文章目录 1、本地独立部署会话模式的Flink2、本地独立部署会话模式的Flink集群3、向Flink集群提交作业4、Standalone方式部署单作业模式5、Standalone方式部署应用模式的Flink Flink的常见三种部署方式: 独立部署(Standalone部署)基于K8S部署…

使用Tortoisegit界面拉起master主分支以副分支以及命令行操作

文章目录 1、Gui操作界面2、命令行操作3、合并分支到master分支上面 1、Gui操作界面 "小乌龟"通常指的是Git的图形用户界面(GUI)工具,其中比较常见的是TortoiseGit。下面是使用TortoiseGit来拉取(checkout)一…

数据结构(一)—— 数据结构简介

文章目录 一、基本概念和术语?1.1、数据1.2、数据元素1.3、数据项(属性、字段)1.4、数据对象1.5、数据结构 二、逻辑结构和物理结构(存储结构)2.1、逻辑结构1、定义2、分类(线性结构和非线性结构&#xff0…

Netty 入门 — 亘古不变的Hello World

这篇文章我们正式开始学习 Netty,在入门之前我们还是需要了解什么是 Netty。 什么是 Netty 为什么很多人都推崇 Java boy 去研究 Netty?Netty 这么高大上,它到底是何方神圣? 用官方的话说:Netty 是一款异步的、基于事…

四、K8S之Deployment

一、概述 在K8S中,Deployment是一种更高层级的控制器,用于管理应用程序的部署和更新。为 Pod和 ReplicaSet提供声明式的更新能力。比如: 部署ReplicaSet(副本集) 清理不再需要的旧版RS 扩展/缩小RS里的Pod数量 动态…

vue绑定style和class 对象写法

适用于:要绑定多个样式,个数确定,名字也确定,但不确定用不用。 绑定 class 样式【对象写法】: .box{width: 100px;height: 100px; } .aqua{background-color: aqua; } .border{border: 20px solid red; } .radius{bor…

【动态库】Ubuntu 添加动态库的搜索路径

在运行程序时,经常遇到下面这种动态库加载失败的情况,这时往往是系统在动态库的搜索路径下没有找到对应的库文件导致的。 目录 一、使用 LD_LIBRARY_PATH 二、修改 /etc/ld.so.conf 一、使用 LD_LIBRARY_PATH 环境变量 LD_LIBRARY_PATH是动态库的搜索…

Jenkins集成newman

一、Docker环境准备 二、Jenkins环境准备 三、登录Jenkins 安装NodeJs插件 四、Jenkins全局工具配置Nodejs 五、创建Jenkins自由风格项目 构建步骤1:选择Execute NodeJS script构建步骤2:选择执行shell脚本 六、将postman相关的脚本、环境变量数据、全局…

AndroidX项目接入穿山甲广告填坑

本文旨在记录初步接入过程遇到的一点点小问题,更详细的文档还是要参考官方文档。 一、项目版本 GradlePlugin:8.0.2 Gradle:8.0 Kotlin:1.7.20 compileSdk:34 compose-bom:2022.10.00 AS:2022.2.1 …

Java反射调用jar包

反射作为托管语言的特性,很多框架都依赖反射来实现容器和面向接口编程,对架构程序很重要,首先试验Java的反射部分。 首先创建一个ZLZJar的工程,让他打包成jar包,代码如下 public class Test {//加两个整数public int…

ELK 日志分析系统介绍与部署

目录 一、ELK 简介: 1.开源工具介绍: 2.其它组件: 2.1 Filebeat: 2.2 Fluentd: 2.3 缓存/消息队列(redis、kafka、RabbitMQ等): 3. filebeat 结合 logstash 带来好处: 二、为什么要…

网络监控与故障排除:netstat命令的使用指南

文章目录 概述什么是 netstat 命令?netstat 命令的作用和功能netstat 命令的常见用途 安装和基本用法安装 netstat 命令netstat 命令的基本语法查看活动网络连接 查看网络接口信息查看所有网络接口信息查看指定网络接口信息网络接口状态说明 网络连接状态显示所有连…

[0xGameCTF 2023] web题解

文章目录 [Week 1]signinbaby_phphello_httprepo_leakping [Week 2]ez_sqli方法一&#xff08;十六进制绕过&#xff09;方法二&#xff08;字符串拼接&#xff09; ez_upload [Week 1] signin 打开题目&#xff0c;查看下js代码 在main.js里找到flag baby_php <?php /…

云安全——云计算基础

0x00 前言 学习云安全&#xff0c;那么必然要对云计算相关的内容进行学习和了解&#xff0c;所以云安全会分为两个部分来进行&#xff0c;首先是云计算先关的内容。 0x01 云计算 广泛传播 云计算最早大范围传播是2006年&#xff0c;8月&#xff0c;在圣何塞【1】举办的SES&a…

【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;vue要做权限管理该怎么做…

微信小程序异常:navigateTo:fail can not navigateTo a tabbar page

场景还原 微信小程序利用路径wx.navigateTo跳转界面时发送异常 跳转代码 showDetail(e){// 获取图片绑定的ID编号let id e.currentTarget.dataset.id;// 指定编号查询 携带参数到详情界面 wx.navigateTo({url: /pages/details/details?id id,})}异常代码 WAServiceMain…

【Java 进阶篇】JavaScript电灯开关案例:从原理到实现

JavaScript是一门强大的编程语言&#xff0c;它可以用来创建各种交互式网页应用。在这篇博客中&#xff0c;我们将通过一个简单的电灯开关案例来深入了解JavaScript的基础概念&#xff0c;包括HTML、CSS和JavaScript的结合使用。我们将从头开始构建这个案例&#xff0c;逐步引入…

20231008-20231013 读书笔记

计算机硬件 基本硬件系统&#xff1a;运算器、控制器、存储器、输入设备和输出设备中央处理单元&#xff08;CPU&#xff09;:运算器、控制器、寄存器组和内部总线等部件组成 功能&#xff1a;程序控制、操作控制、时间控制、数据处理运算器&#xff1a;ALU、AC、DR、PSW控制器…

Go 匿名函数与闭包

Go 匿名函数与闭包 匿名函数和闭包是一些编程语言中的重要概念&#xff0c;它们在Go语言中也有重要的应用。让我们来详细介绍这两个概念&#xff0c;并提供示例代码来帮助理解。 文章目录 Go 匿名函数与闭包一、匿名函数&#xff08;Anonymous Function&#xff09;二、闭包函…

论文阅读--深度学习基础文献

本文属于资料整理 AlphaGo Zero 论文信息&#xff1a;Silver D, Schrittwieser J, Simonyan K, et al. Mastering the game of go without human knowledge[J]. nature, 2017, 550(7676): 354-359. 参考文章&#xff1a; 深入浅析AlphaGo Zero与深度强化学习 AlphaGo Zero论文…