1. 程式人生 > >Python之八皇后問題

Python之八皇后問題

八皇后的問題解析請見:

這裡給出Python的解法,相對於C語言,Python比較簡單,程式碼量較小,但是效率也只能呵呵了,貌似很難兩全啊。

首先定義衝突函式:

def conflict(state,nextX):
    nextY = len(state)
    for i in range(nextY):
        if abs(state[i] - nextX) in (0,nextY - i):
            return True
    return False

遞迴:
def queen(num = 8,state = ()):
    if len(state) == num-1:
        for pos in range(num):
            if not conflict(state,pos):
                yield (pos,)
    else:
        for pos in range(num):
            if not conflict(state,pos):
                for result in queen(num,state+(pos,)):
                    yield (pos,)+result

對輸出進行形象化處理:
def prettyprint(solution):
    def line(pos,length = len(solution)):
        return '. '*pos + '* ' + '. '*(length - pos - 1)
    for pos in solution:
        print(line(pos))


相關推薦

Python皇后問題

八皇后的問題解析請見: 這裡給出Python的解法,相對於C語言,Python比較簡單,程式碼量較小,但是效率也只能呵呵了,貌似很難兩全啊。 首先定義衝突函式: def conflict(stat

遞迴演算法皇后

八皇后問題核心: 1:同一行或者同一列不能放置皇后; 2:斜率為1/-1的對角線上不能有兩個皇后。 如圖: 實現原理:     #include<iostream> #include<cstdio> using std::

資料結構圖論深度搜索皇后

//八皇后問題 #include<cstdio> #include<iostream> #include<cstdlib> #include<cmath> using namespace std; int a[100],coun

回溯法皇后問題

關於八皇后的介紹我就不再這裡多囉嗦了,大家可以自行百度。 現在,我來說明一下八皇后的限制條件: 1.在同一行內,皇后不能出現兩次; 2.在同一列內,皇后不能出現兩次; 3.在同一條對角線內,皇后不能出現出現兩次。 問題是:找出一個位置使得八皇后同時存放在棋盤上且互相

【C/C++】回溯經典演算法-->皇后問題

一、八皇后問題 八皇后問題,是一個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於1848年提出:在8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案。

演算法皇后問題詳解暨終極極限挑戰

       八皇后問題是一個以國際象棋為背景的問題:如何能夠在 8×8 的國際象棋棋盤上放置八個皇后,使得任何一個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題:這時棋盤的大小變為n1×

每日學點python(全域性變數與區域性變數名字相同問題)

1.可變型別與不可變型別 可變型別,值可以改變: 列表 list 字典 dict 不可變型別,值不可以改變: 數值型別 int, long, bool, float 字串 str 元組 tuple 看如下程式碼: 2.修改全域性

一步一步寫演算法(皇后

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    八皇后是一道很具典型性的題目。它的基本要求是這樣的:在一個8*8的矩陣上面放置8個物體,一個矩陣點只允許放置一個物體,任意兩個點不能在一行上,也不能在一列上,不能在

Selenium+Python種元素定位方法

如有疑問,可以留言或私信問我喲~ 一、id定位 driver.find_element_by_id("txtUaserName").send_keys("容音@lily") 二、name定位 driver.find_element_by_name("username"

Python實現皇后問題

  八皇后問題是指8*8位的棋盤上,擺8個皇后,使得任意一個皇后不在其他皇后的同一橫線上,同一豎線上,同一斜線(包括右上到左下斜線和左上到右下斜線)上。這個問題是一個經典的遞迴問題。 #八皇后問題

python解決皇后問題(python2.7)

八皇后問題是計算機中極為經典的一個遞迴問題。在python中用生成器可以很方便地解決它。 先明確一些細節,產生的解可以用列表或元組儲存,這裡選擇用元祖。元祖的索引充當行數,數值充當列數。 先定義一個驗證衝突函式conflict: >>> def con

Python函數

列表 應該 聚合 作用 接收 求階乘 問題 mage 函數式編程 Python函數 函數作用: (1)代碼重用 (2)一種設計工具,分解復雜問題 (3)將相關功能打包並參數化 函數種類: 全局函數:定義在模塊中 局部函數:嵌套在其他函數中 lambda函數:表達

Python階段 學習記錄---算法

第一個元素 排序 小根堆 () 規律 空間復雜度 場景 復數 練習 算法(Algorithm): 一個計算過程, 解決問題的方法1、遞歸的兩個特點 - 調用自身 - 結束條件時間復雜度 - 時間復雜度是用來估計算法運行時間的一個式子(單位) - 一般

Python路【第篇】:堡壘機實例以及數據庫操作

流程 plain ima update 相關操作 tcs tmp int /tmp 堡壘機前戲 開發堡壘機之前,先來學習Python的paramiko模塊,該模塊機遇SSH用於連接遠程服務器並執行相關操作 SSHClient 用於連接遠程服務器並執行基本命令 基於用戶名密

孤荷凌寒自學python天 初識Python的序列元組

孤荷凌寒自學python第八天 Python的序列之元組   (完整學習過程螢幕記錄視訊地址在文末,手寫筆記在文末) (同步音訊筆記:https://www.ximalaya.com/keji/19103006/136882466 ) 元組與列表非常相像,如果要從直觀的角度去區分的話,則:

帶你輕而易舉的學習python——皇后問題

首先我們來看一下這個著名的八皇后問題 八皇后問題:在8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。  在這個問題提出之後人們又將它擴充套件到了n×n格的棋盤擺放n個皇后有多少種擺法 其實這是隻有在8×8出現這種問題嗎?那

Python極簡教程:網路爬蟲入門

讀取網頁 下載後使用gbk解碼。 import urllib2 url = 'http://www.domain.com/domestic' # download resp = urllib2.urlopen(url).read() # decode resp = resp.dec

A搜尋演算法(python數碼問題

##什麼是啟發式搜尋演算法 啟發式搜尋(Heuristically Search)又稱為有資訊搜尋(Informed Search),它是利用問題擁有的啟發資訊來引導搜尋,達到減少搜尋範圍、降低問題複雜度的目的,這種利用啟發資訊的搜尋過程稱為啟發式搜尋。 啟

pythonLinux基礎(

⽂件壓縮解壓:bzip2tar與bzip2命令結合使⽤實現⽂件打包、壓縮(⽤法和gzip⼀樣)。tar只負責打包⽂件,但不壓縮,⽤bzip2壓縮tar打包後的⽂件,其副檔名⼀般⽤ xxxx.tar.gz2。在tar命令中增加⼀個選項(-j)可以調⽤bzip2實現了⼀個壓縮的功能,實⾏⼀個先打包後壓 縮的過程。

決戰Python巔()番外

哎,又是忙碌的週一週二週三,雖然今天才週二,但是明天的時間基本排滿了- -好累呀。 這兩天沒有寫部落格,最近事情比較多,昨天把第一模組的最後一個購物車的作業交上去了,然後和導師預約了下考核時間,這兩天要準備準備,等考核結束了,寫一篇第一模組的總結吧。 考核是在週四晚上,大概週五晚上把總結寫完