国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

[碩.Love Python] 高斯N皇后問題(回溯法)

2019-11-08 02:06:56
字體:
供稿:網(wǎng)友
八皇后問題是高斯于1950年提出的,這是一個典型的回溯算法的問題。八皇后問題的大意如下:

國際象棋的棋盤是8行8列共64個單元格,在棋盤上擺件八個皇后,使其不能互相攻擊,也就是說任意兩個皇后都不能處于同一行、同一列或同一斜線上。

問總共有多少種擺放方法,每一種擺放方式是怎樣的。目前,數(shù)學(xué)上可以證明八皇后問題總共有92種解。

# 遞歸版本def nQueens(n, x=0, *solution):    if x == n:        yield solution    else:        for y in range(n):            if all(y != j and abs(x - i) != abs(y - j) for i, j in solution):                yield from nQueens(n, x + 1, *solution, (x, y))# 迭代版本def nQueensIter(n):    solution = []    j = 0    while solution or j < n:        i = len(solution)        while j < n and not all(y != j and abs(x - i) != abs(y - j)                 for x, y in enumerate(solution)):            j += 1        if j < n:            solution.append(j)            if i == n - 1:                yield tuple(enumerate(solution))                j = solution.pop() + 1            else:                j = 0        else:            j = solution.pop() + 1if __name__ == '__main__':    def showSolution(solutions, n):        for i, s in enumerate(solutions, 1):            PRint("%s:/n" % i + "=" * 20)            for x in range(n):                for y in range(n):                    print('Q ' if s[x][1] == y else '_ ', end='')                print()            print()    N = 8    showSolution(nQueens(N), N)    showSolution(nQueensIter(N), N)

劉碩老師Python精品課程:

《Python高級編程技巧實(shí)戰(zhàn)》:

http://coding.imooc.com/class/62.html

 

《Python算法實(shí)戰(zhàn)視頻課程》:

http://edu.csdn.net/combo/detail/174

 

《Python科學(xué)計(jì)算—NumPy實(shí)戰(zhàn)課程》:

http://edu.51cto.com/course/course_id-5046.html

 

熊貓TV直播間:

http://www.panda.tv/671023


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 临江市| 宁远县| 澄城县| 霞浦县| 文登市| 茶陵县| 通道| 醴陵市| 久治县| 仲巴县| 鄂温| 阳原县| 朝阳市| 新疆| 宝山区| 双鸭山市| 潼南县| 抚顺县| 民勤县| 巴马| 大余县| 海晏县| 盖州市| 东光县| 罗江县| 南漳县| 双柏县| 东乌| 金寨县| 潞西市| 大安市| 米泉市| 台湾省| 喀什市| 奉新县| 伽师县| 道真| 晋州市| 彭水| 北辰区| 社旗县|