日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

八皇后问题初始思路python_Python 学习笔记(一)10行代码解决八皇后问题

發布時間:2025/3/19 python 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 八皇后问题初始思路python_Python 学习笔记(一)10行代码解决八皇后问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不引入標準庫和第三方庫,不用分號將多行代碼寫在一行,再10行代碼之類求出八皇后問題的所有解。

---------------------------------------------------------------------------------------

輸出結果為列表l,l[i]表示第i+1行的皇后應放置的列序號。l的初始值是[0]*8,如果第1行的皇后放置在第一列,那么輸出值中l[0]=1。

思路圖:

l[0] l[1] l[2] l[3] l[4] l[5] l[6] l[7]

i |

k |

m |

從第1行開始一次放置皇后,

指針i用于標定現在正在放置哪一行的皇后,當放置完成后,指針i向后移動一位(如放置完第6行,指針i從l[5]移動到l[6],并開始放置第7行的皇后)。

指針k用于檢驗第i+1行的皇后是否與第k+1行的皇后在同一列或同一條直線上。如果不滿足條件,將i指針所指的元素加1(將第i+1行的皇后向右移動一列),k指針歸0(重新檢驗)。

指針m用于檢驗各元素是否溢出,因為棋盤只有8列,所以各元素的值只能取1到8,如果前i行的皇后放置得不好,可能造成在第i+1行,不論把皇后放在哪一列,都不能滿足條件。這種情況下,按照對指針k和指針i的定義,元素l[i]的值會超過8。因此,當最終確定l[i]的值后,指針m從l[i]開始,檢驗元素是否大于8,如果沒有,m向前移以為(這個操作貌似不必要,以后看看可不可以在不增加代碼行數的情況下省略);如果有,將該元素歸零后,m向前移動一位,給將前一位元素加一(即方向第i+1行放不了皇后,把第i行皇后向右移動一列,再看看能不能放得下),然后繼續檢查這個元素是否大于8(如果第i行的元素本身就在第8行了,那么只能再把這一行的皇后重新放置,并把第i-1行的皇后右移一位)。當指針m移到某個元素,給該元素加1后,檢測到該元素沒有大于8,將指針i移動至這個位置,繼續進行前面兩個步驟。

輸出八皇后問題第一個解的代碼:

l, i = [0]*8, 0

while i < 8:

k, l[i] = 0, l[i] + 1

while k < i:

if l[i] == l[k] or abs(l[i] - l[k]) == i - k: l[i], k = l[i] + 1, -1

k += 1

i += 1

for m in range(i - 1, 0, -1):

if l[m] > 8: l[m], i = 0, m - 1

print(l)

輸出八皇后問題所有解的代碼:

l, i = [0]*8, 0

while l[0] < 9:

k, l[i] = 0, l[i] + 1

while k < i:

if l[i] == l[k] or abs(l[i] - l[k]) == i - k: l[i], k = l[i] + 1, -1

k += 1

for m in range(i, 0, -1):

if l[m] > 8: l[m], i = 0, m - 2

if i < 7: i += 1

else: print(l)

這兩個代碼的區別在于:

對于第一個腳本,當確定第8行皇后的位置后(確定l[7]的值后),將指針i移出列表索引的范圍,因此不滿足第2行的判定條件,循環結束。然后輸出列表l

l[0] l[1] l[2] l[3] l[4] l[5] l[6] l[7]

i |

k |

m |

對于第二個腳本,當確定第8行皇后的位置后(確定l[7]的值后),輸出列表值(觸發第10行else條件),將指針i不動。繼續循環,按要求繼續移動3個指針。注意到按照我所給定的條件移動指針和更新數值,當找完8皇后問題的所有解后,l[0]必將溢出正常范圍,因此,我們將循環結束的條件設置為l[0]>=9。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的八皇后问题初始思路python_Python 学习笔记(一)10行代码解决八皇后问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。