亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python解決八皇后問題示例

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

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

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

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

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

其次,運(yùn)用回溯的方法,求得問題的解。此處具體為函數(shù)的遞歸調(diào)用,當(dāng)調(diào)用到棋盤的最后一行,便跳出,求得解。

最后,將我們的解打印出來。難點(diǎn)在于對遞歸調(diào)用函數(shù)的理解。

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

具體代碼如下:

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

運(yùn)行結(jié)果:

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Python中PyAutoGUI幫助文檔(推薦!)

    Python中PyAutoGUI幫助文檔(推薦!)

    PyAutoGui是一個跨平臺GUI自動化庫,PyAutoGUI是一個Python模塊,用于以編程方式控制鼠標(biāo)和鍵盤,下面這篇文章主要給大家介紹了關(guān)于Python中PyAutoGUI幫助文檔的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • python如何實(shí)現(xiàn)遠(yuǎn)程控制電腦(結(jié)合微信)

    python如何實(shí)現(xiàn)遠(yuǎn)程控制電腦(結(jié)合微信)

    這篇文章主要介紹了python如何實(shí)現(xiàn)遠(yuǎn)程控制電腦,利用python設(shè)計(jì)了一個程序來實(shí)現(xiàn)自由管控,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Python實(shí)現(xiàn)讀取字符串按列分配后按行輸出示例

    Python實(shí)現(xiàn)讀取字符串按列分配后按行輸出示例

    這篇文章主要介紹了Python實(shí)現(xiàn)讀取字符串按列分配后按行輸出,涉及Python針對字符串的遍歷、判斷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • Python中使用strip()方法刪除字符串中空格的教程

    Python中使用strip()方法刪除字符串中空格的教程

    這篇文章主要介紹了Python中使用strip()方法刪除字符串中空格的教程,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Python圖像運(yùn)算之圖像閾值化處理詳解

    Python圖像運(yùn)算之圖像閾值化處理詳解

    這篇文章將詳細(xì)講解圖像閾值化處理,涉及閾值化處理、固定閾值化處理和自適應(yīng)閾值化處理,這是圖像邊緣檢測或圖像增強(qiáng)等處理的基礎(chǔ),感興趣的可以了解一下
    2022-04-04
  • python學(xué)習(xí)實(shí)操案例(二)

    python學(xué)習(xí)實(shí)操案例(二)

    這篇文章主要介紹了python學(xué)習(xí)實(shí)操案例,主要實(shí)操內(nèi)容有二進(jìn)制轉(zhuǎn)換、為自己手機(jī)充值、、計(jì)算能量的消耗等,需要的小伙伴可以參考一下
    2022-02-02
  • python實(shí)操練習(xí)案例(六)

    python實(shí)操練習(xí)案例(六)

    這篇文章主要介紹了python實(shí)操練習(xí)案例,前面也在陸續(xù)的向大家分享了python實(shí)操練習(xí)的案例,今天小編繼續(xù)向大家分享python實(shí)操練習(xí)案例的案例,需要的小伙伴可以參考一下
    2022-02-02
  • Django模板報(bào)TemplateDoesNotExist異常(親測可行)

    Django模板報(bào)TemplateDoesNotExist異常(親測可行)

    這篇文章主要介紹了Django模板報(bào)TemplateDoesNotExist異常(親測可行),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • python中實(shí)現(xiàn)定時任務(wù)的幾種方案

    python中實(shí)現(xiàn)定時任務(wù)的幾種方案

    本文呢給大家總結(jié)以下幾種方案實(shí)現(xiàn)定時任務(wù),可根據(jù)不同需求去使用不同方案,文章通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以參考下
    2023-10-10
  • python manim實(shí)現(xiàn)排序算法動畫示例

    python manim實(shí)現(xiàn)排序算法動畫示例

    這篇文章主要為大家介紹了python manim實(shí)現(xiàn)排序算法動畫示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評論