八皇后问题python_【IT专家】八皇后问题(python版理解)

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

八皇后问题(

python

版理解)

2016/03/24 1234

八皇后问题是一个经典的数学问题,同时也是一个典型的回溯问题,

Python

基础教程》简单的思路是:首先尝试在第

1

行放置第

1

个皇后,然后在第

2

行某个

位置放置皇后,依次进行,当发现某行的所有位置都不能防止皇后时,回溯至上一

行,试着将上一行皇后放置在其他位置,再考虑下一行皇后的位置。

二、规则描述

首先由元组表示皇后的位置,如

state[0] = 2

,则表示第

1

行的皇后位于第

3

列,对于

8

皇后问题,需要取长度为

8

的元组表示

8

皇后的位置。同时该问题可扩

展至

n

皇后。

定义一个冲突函数描述已知皇后和下一个皇后的位置是否有冲突,该函数定

义如下

:

def conflict(state , nextX): nextY = len(state) for i in range(nextY): #

检查已知皇后

在各行的位置是否与下一行成对角或同列关系

if

abs(state[i]

-

nextX)

in

(0

,

nextY

-

i ): return True return False

其中的表达式

abs(state[i] - nextX) in (0 , nextY - i )

解为:对于第

i

行皇后的位置

state[i]

,检查其与第

nextY

行皇后位置

nextX

是否是

位于同列或对角。同列时满足:

state[i] = nextX

,也即

state[i]– nextX = 0

对角时,有

2

种情形需要考虑,其一为第

nextY

行皇后位置出现于

state[i]

的右

对角线,从水平方向上

nextX

-

state[i]

垂直方向

nextY

i

相等,即:

nextX

-

state[i]= nextY – i

对于另一种情形,则第

nextY

行皇后位置出现于

state[i]

的左边对角线,从水平

方向上

state[i]- nextX

垂直方向

nextY – i

相等,即:

state[i]- nextX= nextY – i

综上,对角线时满足,

abs(state[i] - nextX) = nextY – i

三、基本情形

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值