python实现八皇后问题(百练OJ:2754:八皇后)
生活随笔
收集整理的這篇文章主要介紹了
python实现八皇后问题(百练OJ:2754:八皇后)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:八皇后
描述
對于某個滿足要求的8皇后的擺放方法,定義一個皇后串a與之對應,即a=b1b2...b8,其中bi為相應擺法中第i行皇后所處的列數。已經知道8皇后問題一共有92組解(即92個不同的皇后串)。
給出一個數b,要求輸出第b個串。串的比較是這樣的:皇后串x置于皇后串y之前,當且僅當將x視為整數時比y小。
樣例輸出
15863724 84136275 def queen(A, cur=0):if cur==len(A):#這里len(A)的值為8,當發現cur==8時候,# 說明前面的0-7都已經找到了正確的位置,# 這就是一個滿足要求的結果b.append(list(A))else:for col in range(len(A)):A[cur] = col #表示把第cur行的皇后放在col列上ok = True #用ok這個值來記錄是否沖突#以下這個for 循環判斷是判斷 第cur行是否更前面的皇后沖突for r in range(cur):if A[r]==col or r-A[r]==cur-A[cur] or r+A[r]==cur+A[cur]:#判斷是否跟前面的皇后沖突ok = False ##一旦發現沖突標記一下break ##一旦發現沖突標記一下之后停止計算if ok:#若是發現了跟前面的皇后沖突了,說明當前cur行是不能放在col列上面的,# 于是就 進行下一次的 for col in range(len(A))循環,也就是去測下一個col值行不行#若是發現當前行的cur的col沒有與前面的沖突,那么就開始對下一行尋找合適放置位置即尋找col值queen(A,cur+1)b=[] #用來存儲所有的解決方案 queen([0]*8, 0)#以下操作實現題目的輸出要求 n=int(input()) for i in range(n):x=int(input())a=b[x-1]for j in range(8):print(a[j]+1,end="")print()
總結
以上是生活随笔為你收集整理的python实现八皇后问题(百练OJ:2754:八皇后)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nova 之compute服务
- 下一篇: F2上的8×8可逆矩阵的个数为2的62次