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

Python解決八皇后問題示例

 更新時間:2018年04月22日 14:27:07   作者:wangbowj123  
這篇文章主要介紹了Python解決八皇后問題,簡單描述了八皇后問題的原理并結合實例形式分析了Python基于遞歸算法解決八皇后問題的相關操作技巧,需要的朋友可以參考下

本文實例講述了Python解決八皇后問題的方法。分享給大家供大家參考,具體如下:

八皇后問題是一個以國際象棋為背景的問題:如何能夠在 8×8 的國際象棋棋盤上放置八個皇后,使得任何一個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處于同一條橫行、縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題:這時棋盤的大小變?yōu)閚1×n1,而皇后個數也變成n2。而且僅當 n2 = 1 或 n1 ≥ 3 時問題有解。

這是一個典型的回溯算法,我們可以將問題進行分解:

首先,我們要想到某種方法來解決沖突檢測問題,即不能令棋子處于能相互吃掉的位置——相鄰、左右對角線。

其次,運用回溯的方法,求得問題的解。此處具體為函數的遞歸調用,當調用到棋盤的最后一行,便跳出,求得解。

最后,將我們的解打印出來。難點在于對遞歸調用函數的理解。

這僅僅是思路,是我們必須要解決的問題,但并不代表程序的運行流程。

具體代碼如下:

#-*- coding:utf-8 -*-
import random
#沖突檢查,在定義state時,采用state來標志每個皇后的位置,其中索引用來表示橫坐標,基對應的值表示縱坐標,例如: state[0]=3,表示該皇后位于第1行的第4列上
def conflict(state, nextX):
  nextY = len(state)
#  print(nextY),
  for i in range(nextY):
    #如果下一個皇后的位置與當前的皇后位置相鄰(包括上下,左右)或在同一對角線上,則說明有沖突,需要重新擺放
    if abs(state[i]-nextX) in (0, nextY-i):
#縱坐標減去下一個皇后的橫坐標的絕對值 處于 0到下一皇后縱坐標減i則沖突
      return True
  return False
#采用生成器的方式來產生每一個皇后的位置,并用遞歸來實現下一個皇后的位置。
def queens(num, state=()):
  #num = 8
#  print("%d "%len(state)),
  for pos in range(num):
    if not conflict(state, pos): #如果沒有沖突
      #產生當前皇后的位置信息
      if len(state) == num-1:
        yield (pos, ) #生成元組
      #否則,把當前皇后的位置信息,添加到狀態(tài)列表里,并傳遞給下一皇后。
      else:
        for result in queens(num, state+(pos,)):
          yield (pos, ) + result
          #result這個變量代表的是quees返回的元組
#若是最后一行 對于 pos in range(num)調用conflict(state, num) ,
#如果沒有沖突,生成元組
#若不是最后一行 對于pos in range(num)調用conflict(state, pos),
#如果沒有沖突,state更新,遞歸調用queens(num, state) state將更新
#為了直觀表現棋盤,用X表示每個皇后的位置
def prettyprint(solution):
  def line(pos, length=len(solution)):
    return '. ' * (pos) + 'X ' + '. '*(length-pos-1)
  for pos in solution:
    print line(pos)
if __name__ == "__main__":#來判斷是否是在直接運行該.py文件
  prettyprint(random.choice(list(queens(8))))

運行結果:

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • Swift 3.0在集合類數據結構上的一些新變化總結

    Swift 3.0在集合類數據結構上的一些新變化總結

    與字符串類似,Swift3在數組和字典等結構上也有改動,這里我們就來整理Swift 3.0在集合類數據結構上的一些新變化總結:
    2016-07-07
  • python?unicodedata模塊用法

    python?unicodedata模塊用法

    這篇文章主要為大家介紹了python?unicodedata模塊用法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • django連接oracle時setting 配置方法

    django連接oracle時setting 配置方法

    今天小編就為大家分享一篇django連接oracle時setting 配置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • django mysql數據庫及圖片上傳接口詳解

    django mysql數據庫及圖片上傳接口詳解

    這篇文章主要介紹了django mysql數據庫及圖片上傳接口詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • python里使用正則的findall函數的實例詳解

    python里使用正則的findall函數的實例詳解

    這篇文章主要介紹了python里使用正則的findall函數的實例詳解的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • OpenCV半小時掌握基本操作之角點檢測

    OpenCV半小時掌握基本操作之角點檢測

    這篇文章主要介紹了OpenCV基本操作之角點檢測,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Python實現生成對角矩陣和對角塊矩陣

    Python實現生成對角矩陣和對角塊矩陣

    這篇文章主要為大家詳細介紹了如何利用Python實現生成對角矩陣和對角塊矩陣,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • PyTorch的nn.Module類的定義和使用介紹

    PyTorch的nn.Module類的定義和使用介紹

    在PyTorch中,nn.Module類是構建神經網絡模型的基礎類,所有自定義的層、模塊或整個神經網絡架構都需要繼承自這個類,本文介紹PyTorch的nn.Module類的定義和使用介紹,感興趣的朋友一起看看吧
    2024-01-01
  • python提取word文件中的圖片并上傳阿里云OSS

    python提取word文件中的圖片并上傳阿里云OSS

    這篇文章主要介紹了通過Python提取Word文件中的所有圖片,并將其上傳至阿里云OSS。文中的示例代碼對學習Python有一定的幫助,快跟隨小編一起學習一下吧
    2021-12-12
  • selenium + python 獲取table數據的示例講解

    selenium + python 獲取table數據的示例講解

    今天小編就為大家分享一篇selenium + python 獲取table數據的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10

最新評論

黄冈市| 二连浩特市| 大安市| 普兰店市| 无为县| 乐安县| 诏安县| 绥中县| 平利县| 普定县| 牙克石市| 祥云县| 上虞市| 临沧市| 伊金霍洛旗| 通渭县| 红安县| 子长县| 阿拉善右旗| 咸阳市| 庆云县| 天全县| 合作市| 桓台县| 博兴县| 临高县| 阿图什市| 壶关县| 嫩江县| 那坡县| 定州市| 临洮县| 马龙县| 肇庆市| 汕头市| 光山县| 南皮县| 南宫市| 夏河县| 博爱县| 乐平市|