python基礎查漏補缺7--八皇后問題

來源:互聯網
上載者:User

標籤:pos   als   曆史   random   length   format   對比   coding   solution   

# -*- coding=utf-8 -*-‘‘‘@Desc: 八皇后演算法,python實現@Date: 2017-10-13@Author: HenryWang‘‘‘import random# 八皇后問題的前情不在此重複說明# 驗證新的皇后是否和之前的皇后所在位置有衝突:在同一列或者在對角線上# state 為已經確定的皇后的位置元組# nextX 為新的一個皇后的所在列的位置def conflict(state, nextX):    nextY = len(state) # 新的皇后所在行    for i in range(len(state)): # 針對之前所有的皇后來判斷        # state[i]為第 i 行的皇后的所在列的位置        # 如果 state[i] - nextX == 0,那麼新的皇后和所對比的皇后在同一列,返回對比結果為True        # 如果 abs(state[i] - nextX) == nextY - i ,那麼新的皇后和所對比的皇后在對角線上,返回對比結果為True        if abs(state[i]-nextX) in (0, nextY-i):            return True    # 如果新的皇后和所有曆史皇后都不在同一列或者對角線上,返回對比記過為false    return False# 產生皇后元組,預設皇后元組為空白def queens(num, state=()):    # 針對所有的皇后所在的行,判斷每一列位置,0 - 7    for pos in range(num):        # 調用皇后位置衝突驗證方法        if not conflict(state, pos):            # 如果已經是最後一個皇后了,就yield這個皇后的位置            if len(state) == num-1:                yield (pos, )            else:                # 如果當前位置可以放皇后,那麼就繼續找到下一個適合位置的皇后,直到遞迴找到所有皇后的位置                for result in queens(num, state+(pos,)):                    yield (pos, ) + result# 漂亮的列印方法def prettyprint(solution):    def line(pos, length=len(solution)):        # 每一行,皇后所在位置列印 X,其他位置列印 .        return ‘. ‘ * (pos) + ‘X ‘ + ‘. ‘ * (length-pos-1)    # 針對每一個皇后所在的行都進行列印    for pos in solution:        print(line(pos))if __name__ == ‘__main__‘:    print(‘一共有 {} 種可能的皇后排放位置選擇‘.format(len(list(queens(8)))))    print(‘其中一種選擇是:‘)    prettyprint(random.choice(list(queens(8))))

  

python基礎查漏補缺7--八皇后問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.