python 回溯法 子集樹模板 系列 —— 1、8 皇后問題

問題

8×8格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。

709432-20170529221903180-1839728461.jpg

分析

為了簡化問題,考慮到8個皇后不同行,則每一行放置一個皇后,每一行的皇后可以放置于第0、1、2、...、7列,我們認為每一行的皇后有8種狀態。那么,我們只要套用子集樹模板,從第0行開始,自上而下,對每一行的皇后,遍歷它的8個狀態即可。

代碼

'''
8皇后問題
'''n = 8 
x = []  # 一個解(n元數組)
X = []  # 一組解# 沖突檢測:判斷 x[k] 是否與前 x[0~k-1] 沖突
def conflict(k):global xfor i in range(k):                              # 遍歷前 x[0~k-1]if x[i]==x[k] or abs(x[i]-x[k])==abs(i-k):  # 判斷是否與 x[k] 沖突return Truereturn False# 套用子集樹模板
def queens(k): # 到達第k行global n, x, Xif k >= n:         # 超出最底行#print(x)X.append(x[:]) # 保存(一個解),注意x[:]else:for i in range(n):  # 遍歷第 0~n-1 列(即n個狀態)x.append(i)     # 皇后置于第i列,入棧if not conflict(k): # 剪枝queens(k+1)x.pop()         # 回溯,出棧# 解的可視化(根據一個解x,復原棋盤。'X'表示皇后)
def show(x):global nfor i in range(n):print('. ' * (x[i]) + 'X ' + '. '*(n-x[i]-1))# 測試
queens(0) # 從第0行開始print(X[-1], '\n')
show(X[-1])

效果圖

709432-20170529221841539-784035528.jpg

本文轉自羅兵博客園博客,原文鏈接:http://www.cnblogs.com/hhh5460/p/6919204.html,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257432.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257432.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257432.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Core Java Volume I — 3.6. Strings

3.6. StringsConceptually, Java strings are sequences of Unicode characters(Java的字符串是一個Unicode序列). For example, the string "Java\u2122" consists of the five Unicode characters J, a, v, a, and ?. Java does not have a…

Android實用代碼七段(五)

前言 每次分享意味著每次都有進步,本系列以實用為主,歡迎和我分享和推薦好用的代碼段~~聲明歡迎轉載,但請保留文章原始出處:) 博客園:http://www.cnblogs.com農民伯伯: http://over140.cnblogs.com 正文 1、展開、收起…

oracle 自增1,oracle自增無法從1開始

問題描述我想讓XH字段從1開始增加,由于是varchar類型的,所以就用這種方式,但我發現我的數據表中XH字段是從217開始增加的,為什么啊問題出現的環境背景及自己嘗試過哪些方法相關代碼// 請把代碼文本粘貼到下方(請勿用圖片代替代碼)declarej number;i number;begini:1;j:1;for i …

ceph Luminous版手動安裝零散記錄

1.安裝必要的依賴包,關防火墻,向/etc/hosts內添加域名等 2.安裝ceph 配置yum源 (如果嫌慢,可以配置cachedir/home/yum/$basearch/$releasever和keepcache1兩個參數,在第一次安裝時將安裝包下載到本地做成yum源,給后面的…

C#最簡單最完整的webservice實例

我做java,但最近接觸crm所以必須研究一下C#中的webservice以備后用,其實就是個新手,哈哈,這個實例是我在參考了網上諸多不完整的例子的情況下,自己摸索完成的。期間遇到過一系列的棘手的問題,經過個人努力終…

2015 UESTC 數據結構專題G題 秋實大哥去打工 單調棧

秋實大哥去打工 Time Limit: 1 Sec Memory Limit: 256 MB 題目連接 http://acm.uestc.edu.cn/#/contest/show/59Description 天行健,君子以自強不息。地勢坤,君子以厚德載物。天天過節的秋實大哥又要過節了,于是他要給心愛的妹子買禮物。但由…

oracle怎么通過sid確定表名,如何獲取Oracle的SID列表

更好的方法是,如果您有權訪問主機并且Oracle安裝使用以下命令:lsnrctl status。這適用于Unix,Linux和Windows機器。 status命令將顯示所有監聽器(及其相關的SID)。C:\>lsnrctl statusLSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Pr…

51 Nod 1007 正整數分組【類01背包】

1007 正整數分組 基準時間限制:1 秒 空間限制:131072 KB 分值: 10難度:2級算法題將一堆正整數分為2組,要求2組的和相差最小。例如:1 2 3 4 5,將1 2 4分為1組,3 5分為1組,兩組和相差1…

YTU 2924: 文件操作--二進制文件讀入

2924: 文件操作--二進制文件讀入 時間限制: 1 Sec 內存限制: 128 MB提交: 58 解決: 20題目描述 現有100名學生的姓名(name)、學號(num)、英語(English)、數學(Math)、語文(Chinese)成績存儲在一個二進制文件student.dic中(姓名用char[20],學號和各科成績用int存儲…

oracle 9.2.0.4,CentOS 4.7 安裝Oracle 9.2.0.4的一些問題

#vi/etc/sysconfig/iptables,增加如下-A INPUT -p udp -s 0/0 -d 0/0 --dport 177 -j ACCEPT-A INPUT -p tcp -s 0/0 -d 0/0 --dport telnet -j ACCEPT-A INPUT -p tcp -s 0/0 -d 0/0 --dport ssh -j ACCEPT-A INPUT -p tcp -s 0/0 -d 0/0 --dport login -j ACCEPT-…

《機電傳動控制》----學習筆記六

《機電傳動控制》與其他學科的聯系 1、《液壓傳動與氣壓傳動》中提到的液壓控制閥中的電液伺服閥與《機電傳動控制》中的控制電動機里的伺服電機有著密切的聯系,都要求我們對伺服系統有著很好的理解。 2、《電路理論》中電機作為獨立的一章,講到了用向量…

Oracle Imp and Exp (導入和導出) 數據 工具使用

Oracle 提供兩個工具imp.exe 和exp.exe分別用于導入和導出數據。這兩個工具位于Oracle_home/bin目錄下。 導入數據exp 1 將數據庫ATSTestDB完全導出,用戶名system 密碼123456 導出到c:\export.dmp中 exp system/123456ATSTestDB filec:\export.dmp fully 其中ATSTestDB為數據庫…

[Oracle][Corruption]究竟哪些檢查影響到 V$DATABASE_BLOCK_CORRUPTION

根據 471716.1,11g 之后,下列動作如果遇到壞塊,都會輸出記錄到 V$DATABASE_BLOCK_CORRUPTION。- Analyze table .. Validate structure- CTAS(Create table as Select)- Export另外,這些也會記錄的:RMAN > Vali…

oracle使用loop將增加十天,使用loop循環操作DML語句

---loop循環:--創建測試表:suxingPROD>create table total3(2 t1 number(8),3 t2 number(8),4 cr date default sysdate);Table created.#測試表已經創建。--查看表中原來的數據:suxingPROD>select * from total3;T1 T2 CR-…

iOS富文本

iOS富文本 背景:前些天突然想做一個筆記本功能,一開始,覺得挺簡單的呀,一個UITextView,網絡緩存也不干了,直接本地NSUserDefault存儲,然后完事了,美工,弄幾張好看的圖片,…

SQL編程題-----1

首先,題目給出這個數據庫表格 要求寫出SQL語句使之變成如下表格 解決方法: SELECT t1.Rq,t1.勝,t2.負 FROM //t1和t2是自己命的新表格的名字 (SELECT Rq,COUNT(*) AS 勝 //As 勝意思是輸出結果時列名為”勝“FROM testtableWHERE Sh…

maven設置jdk版本

兩種方式&#xff1a;一、可以修改 MAVEN 的 setting.xml 文件&#xff0c;統一修改。<profiles> <profile> <id>jdk-1.6</id> <activation> <activeByDefault>true</activeByDefault>…

獲取系統時間出錯oracle-,oracle 獲取系統時間(轉)

Oracle中如何獲取系統當前時間select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual;ORACLE里獲取一個時間的年、季、月、周、日的函數select to_char(sysdate, yyyy ) from dual; --年select to_char(sysdate, MM ) from dual; --月select to_char(sysdate, dd ) f…

PHP環境搭建

以Apache模塊運行PHP環境搭建方法 下載Apache 注意&#xff1a;在http://www.apachelounge.com/ 下載Apache&#xff0c;因為該網站提供的Apache是通過更高版本的VC編譯器編譯的。由于接下來我下載的PHP版本是VC11的&#xff0c;所以下載的Apache版本也是基于VC11的。 download…

Java語言中的-----訪問修飾符

day04 Java語言中的----訪問修飾符一、訪問修飾符概述&#xff1a;訪問修飾符就是對變量或者是方法或者是類的一個修飾&#xff0c;通過修飾以后實現一些必要的權限&#xff0c;主要是說明類成員如何被使用的作用。二、訪問修飾符1、訪問修飾符有哪些&#xff1f;訪問修飾符總共…