日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

八皇后问题python实现_八皇后问题的python实现

發布時間:2024/10/14 python 87 豆豆
生活随笔 收集整理的這篇文章主要介紹了 八皇后问题python实现_八皇后问题的python实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以前寫的一個八皇后問題求解,思路就是每次循環列出所有的可能解,然后過濾出不符合要求的解。詳細見代碼:

//檢查兩個點是否在攻擊線上

def attack(p1,p2):

return p1[0]==p2[0] or p1[1] == p2[1] or (abs(p1[0]-p2[0])==abs(p1[1]-p2[1]))

//棋盤類

class Cell():

def __init__(self,n):

self.n = n

self.cell = [[(i,j) for j in range(n)] for i in range(n)]

def isAttack(p,rp):

for i in rp:

if attack(p,i):

return True

return False

def eightQueen(num):

cell = Cell(num)

board = cell.cell

result = [[(0,i)] for i in range(num)]

count = 0

for col in board:

count+=1

for p in col:

if not result:

result.append([p])

else:

#scan the result

for rp in result:

if not isAttack(p,rp):

copy = rp[:]

copy.append(p)

result.append(copy)

result = filter(lambda x: x.__len__()==count,result)

return filter(lambda x : x.__len__()==num,result)

//使用方式如下,返回所有的有效解

result = eightQueen(8)

下面是同事的遞歸方式的解決方案

class EightQueen:

#define const queen number

queenNum = 8

def __init__(self):

#定義一個8行 8 列的二維數組來模擬棋盤

self.qiPan = []

self.num = 0

#init a n*n list[][] as qi pan

for i in range(self.queenNum):

rows = []

for j in range(self.queenNum):

xy = [i,j]

rows.append(xy)

self.qiPan.append(rows)

#定義一個遞歸方法,遞歸去下一行尋找符合條件的坐標點

#param e8 存放符合條件的坐標點的列表

#param rowNum 尋找的行號

def getNext(self,e8,rowNum):

if len(e8) == self.queenNum:

self.num += 1

#輸出符合條件的全部坐標點

print "method "+str(self.num)+"is:"+str(e8)

return

if rowNum > len(self.qiPan):

return

for d in self.qiPan[rowNum]:

if self.matchAllE8(e8,d):

e8copy = e8[:]

e8copy.append(d)

self.getNext(e8copy,rowNum+1)

def calcNum(self):

#遍歷棋盤的第一行

for i in self.qiPan[0]:

#從第二行開始遞歸尋找符合條件的坐標

self.getNext([i],1)

print "all method is:"+str(self.num)

#判斷left0坐標 是否滿足上面行中已找到的全部符合條件的坐標都不攻擊

def matchAllE8(self,e8,left0):

for i in e8:

if not self.isMatch(i,left0):

return False

return True

# 符合不攻擊的條件

def isMatch(self,f,g):

return (f[0]+f[1] != g[0]+g[1]) and\

(f[0]-f[1] != g[0]-g[1]) and\

(f[0] != g[0]) and (f[1] != g[1])

e = EightQueen()

e.calcNum()

總結

以上是生活随笔為你收集整理的八皇后问题python实现_八皇后问题的python实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。