python8皇后不攻击问题_Python八皇后问题(落最后一颗子)

最近在看Python基础,遇到了八皇后问题,看得整个人晕晕乎乎,甚至开始怀疑人生。

问题是在一个8*8的国际象棋棋盘上摆放8个皇后,问题一是找出一个解,问题二是问有多少个解。这里我把我自己的理解写出来,只针对最后一个落子的情况,不涉及递归,希望能有所帮助。

首先定义冲突函数:

def conflict(state,nextQueenColumnIndex):

#state是当前已经放置的皇后在棋盘上面的列索引组成的元组,nextQueenColumnIndex是将要放置的下一个皇后(简称A)的列索引,这里关键问题在于要将A与之前放置的皇后一一比对,找出是否会被吃掉(存在冲突),因此需要做循环,之前已经放置的皇后个数当然是len(state),因为索引是从0开始算的,所以已经放置的最后一个皇后的行索引为len(state)-1,因此A的行索引为len(state)。

nextQueenRowIndex=len(state)

for everyqueen in range(nextQueenRowIndex):

#注意range右边是开区间,取出每一行等行索引。

if abs(state[everyqueen]-nextQueenColumnIndex) in (0,nextQueenRowIndex-everyqueen):

#,这里需要明白的是,假如state为(0,1,2,3),那么代表的是第一行皇后列索引为0,第二行皇后列索引为1,以此类推。那么state[everyqueen]实际上就是取出了每一行皇后的列索引。

return True

return False

#这里有两个关键点,第一、是abs(state[everyqueen]-nextQueenColumn)==0检查A是否与其他皇后在同一列,abs(state[everyqueen]-nextQueenColumn)==nextQueenRowIndex-everyqueen检查A是否与其他皇后在一条斜线上(对角线),其实就是行索引-行索引==列索引-列索引就代表在一条斜线上面。第二、注意return False是与for对齐的,因为只要存在冲突就会return True,当for循环执行完后都没有return的话,那么就会执行到return False,也即不存在冲突,那么A落在这个棋盘点就是对的!

以上,冲突函数就写完了。

然后,我们来写主函数

def MyQueen(state,queencount):

#state依然代表当前已经放置的皇后在棋盘上面的列索引组成的元组,queencount代表皇后的总数(包括已有的和准备下的),下面讨论的是最简单的一种情况,就是已知棋盘的状态,需要下最后一颗子。

if len(state)==queencount-1#len(state)代表已落子的个数,如果与总数-1相等的话,那么我们要下的必然是最后一颗子。这最后一颗子怎么下?当然是要与前面的每一行的皇后做冲突比对,好在我们的冲突函数已经写好了,可以直接用。

for n in range(queencount):取出每一列的列索引,其实就是说在当前棋盘状态下,落子第一列行不行?落子第二列行不行?。。。落子最后一列行不行?其实这里的range(queencount)只是方便我们按次序取出1,2,3,4,5。。。,因为要注意这道题的前提是棋盘是真方形,是在N*N的棋盘上面放置N个皇后,因此我们这里直接用queencount比较方便,当然如果你已经知道棋盘大小为8或者16直接用range(8)或者range(16)也行。

if not conflict(state,n):#n就是要落子的列索引

print(n)

#输出的n就是A的列索引了,也即最后一个皇后落子的棋盘列索引位置。

Over,上面就讨论了八皇后问题中落最后一颗子的简单情况,当然是用这个函数的前提是要知道棋盘的当前落子状态及皇后的总数,我目前刚把这个看懂,写出来,也为自己加深印象,后面的还要继续学习。。。

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

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

相关文章

Could not find result map

"Exception: org.apache.ibatis.builder.xml.IncompleteStatementException: Could not find result map....." 在使用mybatis 3 和spring 3整合的时候,往往粗心的人会在过程中出现以上错误。--------------------------原因是: ***-mapper.xml文件中的 r…

php中unset面试题,php unset和引用——由一道php面试题引发的思考

$test"aaaaa";$abc&$test;unset($test);echo $abc;为什么结果会输出aaaaa呢,$test不是销毁了吗?$abc引用一个销毁的怎么输出的不是空白呢?查了下资料,将原因分析如下:变量存储数据时可以理解为变量的值放…

python下载matplotlib.finance模块_关于Matplotlib中No module named 'matplotlib.finance'的解决办法...

最近在研究量化分析,需要用到matplotlib中的一个库,输入from matplotlib.finance import quotes_historical_yahoo_ohlc, candlestick_ohlc发现有报错,仔细勘查后发现有两个问题,一个是matplotlib模块已经剔除了,所以得…

托管PE文件

文/玄魂 中间语言 在.NET框架中,公共语言基础结构使用CLS来绑定不同的语言。通过要求不同的语言至少要实现CTS包含在CLS中的部分,公共语言基础结构允许不同的语言使用.NET框架。因此,在.NET框架中,所有的语言(C#、VB.N…

带你见识不一样的世界,这5部豆瓣纪录片不可错过!

全世界只有3.14 % 的人关注了爆炸吧知识纪录片一直都是增长见识又带给你力量的东西,你可能忙于学业、生活、工作而不能行万里路,但至少你还可以看纪录片,从一方屏幕看到整个世界。今天就为大家整理了5部高分纪录片,文末附领取方式…

客户要求ASP.NET Core API返回特定格式,怎么办?(续)

前言上次,我们用客户就要求API的返回值属性名必须是PascalCase(如UserName),但是这些API需要同时提供给内部系统使用,默认都是CamelCase(如userName)。其实,返回的都是JSON格式&…

打造自己博客(wordpress)的wap手机版本

这儿介绍我试用的两款插件:wordpress-mobile-edition和wp-t-wap。1.先说一下两者的区别。 wordpress-mobile-edition插件使用后,可以用手机直接访问你的博客主域名,手机会自动调整成wap版本。我的诺基亚6730上测试,自带的浏览器可…

猴子偷桃php代码,C++实现猴子吃桃的示例代码

题目详情有一天,某只猴子摘了一些桃子,当时吃了一半,又不过瘾,于是就多吃了一个。以后每天如此,到第n天想吃时,发现就只剩下一个桃子。输入n,表示到第n天剩下1个桃子,请计算第一天猴…

网吧也用VDI?

升级360以后,挨个菜单都点了一遍,虽然没啥用处,清清垃圾,升级下软件,清理下启动项还是很不错滴。 清理启动项的时候就搞笑了,发现Citrix联机插件居然被360识别为网吧无盘工作站连接中心。ICA Client我想了好…

socket python json_python实现的基于TCP的JSON数据通信

用Python写的一个多线程TCP通信实例,实现了JSON数据的传输。闲言少述,直接上代码​一、client#!/usr/bin/env python# -*- coding:utf-8 -*-#import socketimport threadingimport SocketServerimport jsondef client(ip, port, message):sock socket.s…

知乎超高赞:见识多的人,平时都在看些什么?

全世界只有3.14 % 的人关注了爆炸吧知识微信新功能总在悄咪咪更新,“拍一拍”一出,很多小伙伴都会收到各种群里面千奇百怪的“拍一拍”,到底都是谁在偷偷关注你?真正决定人与人之间的差距的,其实是我们对事物的见识与内…

django 1.3下关于静态文件staticfiles的设置

Django 1.3版本发布有些日子了,在站点被屏蔽的这段时间里学习也处于荒废状态,因此到今天才真正接触到新版下Static文件的处理设置,希望不算太晚。更改设置涉及的文件:settings.py1import os.path2HERE_PATHos.path.dirname(__file…

究竟是什么可以比反射还快实现动态调用?| Source Generators版

前言最近在公众号上看到一篇文章《究竟是什么可以比反射还快实现动态调用?》,它使用的是Newbe.ObjectVisitor,基于C#表达式树访问一个普通class的所有属性和对应的值,可以拥有比直接使用反射快上10倍的性能。就这一需求来说&#…

ofbiz中的数据模型

DelegatorDelegator是整个ofbiz中数据库访问的入口,具体实现是GenericDelegator类,在这个类中通过protected ModelReader modelReader null;protected ModelGroupReader modelGroupReader null;这两个属性变量去查找在xml文件中定义的数据模型ModelRea…

oracle 大页配置,【Oracle】Oracle如何开启大页

前言:在Linux中配置hugepage可以提高oracle的性能,减少oracle sga的页交换,类似于aix中的lagepage。为什么 使用大页?LINUX内存的默认块大小是4K如果SGA为:128Gselect 128* 1024* 1024/4 from dual;33554432个块(三千多…

python关联分析sklearn_Python3利用pandas,sklearn进行关联度分析以及预测的demo

做个简单的demo记录下,防止忘记先看原始数据:一共有5列:日期,金钱,性别,工作年限,年龄。我们的目的是要分析各个维度对金钱的影响。关联度分析代码:# -*- coding: utf-8 -*-from numpy import a…

NLB+Cluster(一)

这也算是个群集系列版吧!首先在前面大家已经看到了利用openfiler建立仲裁磁盘,然后通过Linux开源软件openfiler与windows群集的结合一文看到了windows cluster群集上如何构建文件共享及DHCP服务。那么本次我们将要升级到一个较高的层次,来看一…

只要懂得拒绝,哪会有什么狗血感情与莫名其妙的误会

1 就凭你?也想握朕的手?2 来,快站好~抱好娃!拍全家福啦!3 自我约束有利于家庭和谐,嗯!4 问题来了,你是夜灯党还是漆黑党?你点的每个赞,我都认真当成了喜欢

JS设置文本框只能是数字和小数点。

核心提示&#xff1a;JS判断只能是数字和小数点 只能输入字母和汉字 只能输入字母和汉字 JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input οnkeyup"this.valuethis.value.replace(/\D/g,)" onafterpaste"this.valuethis.value…

如何使用 Linq 获取每个分组中的第一个元素?

咨询区 Arian&#xff1a;考虑下面的记录:Id F1 F2 F3 -------------------------------------------------1 Nima 1990 102 Nima 1990 113 Nima 2000 …