最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python八皇后問題的解決方法

 更新時間:2018年09月27日 14:58:05   作者:冬日新雨  
這篇文章主要為大家詳細(xì)介紹了python八皇后問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文為大家分享了python八皇后問題的解決方法,供大家參考,具體內(nèi)容如下

題目:

給定一個 N*N 正方形棋盤,在上面放置 N個棋子,又叫皇后,使每兩個棋子都不在同一條橫線上、豎線上、斜線上。一般我們都討論8皇后,但是只要N > 4,都會存在解的。

分析:

方法1:根據(jù)定義來處理,即每往棋盤中放置皇后的時候,都要判斷哪些位置可以放新加入的皇后,而哪些地方如果放置皇后的話,會造成沖突。我下面寫的這個代碼就是基于此。
方法2、我看了下別人的優(yōu)化,主要是采用位運(yùn)算來實現(xiàn)計算復(fù)雜度降低的,我沒有用Python 實現(xiàn)這個,所以在這里挖一個坑。

代碼:

代碼里的注釋有詳細(xì)的說明,設(shè)定N值,即可返回一個符合要求的解。但是這個問題還有一個進(jìn)階,那就是討論究竟會有多少個解,這就需要數(shù)論的知識了,而且我對這塊數(shù)學(xué)沒研究過,所以也沒有代碼實現(xiàn)。大家將就使用一下代碼就好了。

class EightQueensPuzzle(object):
  '''
  八皇后問題求解
  代碼使用方法:
    eight_q = EightQueensPuzzle(4, 5)
    print "EIGHT QUEEDS PUZZLE:"
    result = eight_q.eight_queens_puzzle()
    for i in result:
      print i
  '''
  def __init__(self, n, char):
    self.n = n # 棋盤維度
    self.char = char # 皇后標(biāo)記字符

  def init_chess_board(self, n):
    '''
    初始化一個棋盤,棋盤規(guī)格可以按參數(shù) n 隨意選定,一般都討論八皇后,就選擇 8
    :return: 返回棋盤,是一個 8*8 矩陣
    '''
    chess_board = []
    for i in xrange(0, n):
      line = []
      for j in xrange(0, n):
        line.append(0)
      chess_board.append(line)
    return chess_board

  def update_conflict_board(self, conflict_board, position):
    for k in xrange(0, self.n): # 為行添加 1
      conflict_board[position[0]][k] = 1
    for id in xrange(position[0]+1, self.n):
      conflict_board[id][position[1]] = 1 # 為列添加 1
      if position[0] + position[1] - id >= 0: # 為左斜添加 1
        conflict_board[id][position[0] + position[1] - id] = 1
      if position[1] - position[0] + id < self.n: # 為右斜添加 1
        conflict_board[id][position[1] - position[0] + id] = 1

  def queens_conflict(self, conflict_board, position):
    '''
    當(dāng)前棋盤的狀態(tài)是 conflict_board, 判定如果在 position 位置給一個皇后的話,會不會出現(xiàn)問題。
    如果有問題則返回 False,如果沒有問題返回 True
    '''
    if conflict_board[position[0]][position[1]] != 0:
      return False
    else:
      return True

  def eight_queens_puzzle(self):
    '''
    給出一個八皇后的求解答案。
    :return:返回一個結(jié)果并打印.
    '''
    import random
    while True: # 不停尋找符合條件的八皇后排列
      chess_board = self.init_chess_board(self.n)
      conflict_board = self.init_chess_board(self.n)
      for i in xrange(0, self.n):
        flag = 0
        for cnt in conflict_board[i]:
          if cnt != 0:
            flag += 1
        if flag == self.n: # 如果已經(jīng)1被填滿了,說明這個答案錯誤
          break

        while True:
          pos = [i, random.randint(0, self.n-1)] # 元組構(gòu)成皇后的位置
          if self.queens_conflict(conflict_board, pos): # 如果沒有沖突
            chess_board[i][pos[1]] = self.char
            self.update_conflict_board(conflict_board, pos)
            break
      if self.char in chess_board[self.n-1]:
        return chess_board

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在python3.9下如何安裝scrapy的方法

    在python3.9下如何安裝scrapy的方法

    這篇文章主要介紹了在python3.9下如何安裝scrapy的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python導(dǎo)出依賴的五種方法

    Python導(dǎo)出依賴的五種方法

    本文主要介紹了Python導(dǎo)出依賴的五種方法,包括使用pip freeze、pipreqs、poetry、pip-tools和conda,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • Python處理PDF及生成多層PDF實例代碼

    Python處理PDF及生成多層PDF實例代碼

    Python提供了眾多的PDF支持庫,本篇文章主要介紹了Python處理PDF及生成多層PDF實例代碼,這樣就能夠?qū)崿F(xiàn)圖片掃描上來的內(nèi)容也可以進(jìn)行內(nèi)容搜索的目標(biāo)
    2017-04-04
  • Python爬蟲DOTA排行榜爬取實例(分享)

    Python爬蟲DOTA排行榜爬取實例(分享)

    下面小編就為大家?guī)硪黄狿ython爬蟲DOTA排行榜爬取實例(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Python可視化神器pyecharts之繪制箱形圖

    Python可視化神器pyecharts之繪制箱形圖

    這篇文章主要介紹了Python可視化神器pyecharts之繪制箱形圖,箱形圖(Box-plot)又稱為盒須圖、盒式圖或箱線圖,是一種用作顯示一組數(shù)據(jù)分散情況資料的統(tǒng)計圖,因形狀如箱子而得名
    2022-07-07
  • Python實現(xiàn)運(yùn)行其他程序的四種方式實例分析

    Python實現(xiàn)運(yùn)行其他程序的四種方式實例分析

    這篇文章主要介紹了Python實現(xiàn)運(yùn)行其他程序的四種方式,結(jié)合實例形式分析了Python執(zhí)行其他程序相關(guān)模塊與函數(shù)使用技巧,需要的朋友可以參考下
    2017-08-08
  • 盤點Python中讀取和提取JSON文件的4種方法

    盤點Python中讀取和提取JSON文件的4種方法

    JSON(JavaScript?Object?Notation)是一種輕量級的數(shù)據(jù)交換格式,Python中提供了多種方式來讀取和處理JSON文件,本文將詳細(xì)介紹四種常見的方法,希望對大家有所幫助
    2024-03-03
  • python內(nèi)置函數(shù)globals()的實現(xiàn)代碼

    python內(nèi)置函數(shù)globals()的實現(xiàn)代碼

    本文主要介紹了python內(nèi)置函數(shù)globals()的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • python語音識別指南終極版(有這一篇足矣)

    python語音識別指南終極版(有這一篇足矣)

    這篇文章主要介紹了python語音識別指南終極版的相關(guān)資料,包括語音識別的工作原理及使用代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Python依賴庫的幾種離線安裝方法總結(jié)

    Python依賴庫的幾種離線安裝方法總結(jié)

    這篇文章主要介紹了如何在Python中使用pip工具進(jìn)行依賴庫的安裝和管理,包括如何導(dǎo)出和導(dǎo)入依賴包列表、如何下載和安裝單個或多個庫包及其依賴,以及如何指定不同的Python源進(jìn)行安裝,需要的朋友可以參考下
    2025-03-03

最新評論

巴楚县| 罗源县| 万盛区| 正镶白旗| 于都县| 巫溪县| 龙川县| 南川市| 普宁市| 邹平县| 赤峰市| 探索| 甘泉县| 高尔夫| 榆社县| 定日县| 板桥市| 布尔津县| 青铜峡市| 满城县| 花莲市| 册亨县| 小金县| 苍南县| 微博| 平塘县| 九江县| 铜山县| 习水县| 那曲县| 咸丰县| 家居| 横峰县| 凯里市| 阳泉市| 清镇市| 太湖县| 镇坪县| 磴口县| 永春县| 米易县|