最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 非遞歸解決n皇后問題的方法

 更新時間:2021年03月16日 14:06:31   作者:skrrrr__  
這篇文章主要介紹了python 非遞歸解決n皇后問題的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

復雜度可能高了點- - 也沒太注意

我想了好久 也找了好久 沒看到什么能夠用python解決n皇后問題而且不調(diào)用遞歸的 因為我不太能理解遞歸(尤其是到n層時) 智商受限- -

import copy

def check(A,x,y):
  B=[]
  flag=True
  for i in range(len(A)):
    for j in range(len(A)):
      if A[i][j]==1:
        B.append([i,j])
  for m in range(len(B)):
    p = B[m][0]
    q = B[m][1]
    if y == q or (x-p)==abs(y-q):
      flag=False
  return flag

def queen(n):
  A=[[0 for __ in range(n)] for _ in range(n)]
  answer=[]
  for _ in range(n):
    stack=[[0,_,A]]
    while stack:
      judge = 0
      obj=stack.pop(-1)
      x=obj[0]
      y=obj[1]
      array=obj[2]
      flag=check(array,x,y)
      if not flag:
        while 1:
          if check(array, x, y):
            break
          else:
            if stack:
              b=stack.pop(-1)
              x=b[0]
              y=b[1]
              array=b[2]
            else:
              judge=1
              break
      if judge==1:
        break
      array=copy.deepcopy(array)
      array[x][y]=1
      for m in range(n):
        if m!=y and m!=y-1 and m!=y+1 and x+1<n :
          stack.append([x+1,m,array])
      # print(array)
      for j in range(len(array[n-1])):
        if array[n-1][j]==1:
          answer.append(array)
  print(len(answer))
queen(8)

answer中存放的就是最后所有的可行組合
當前解決的是8皇后問題
我的想法是用dfs 在每次搜索時 帶上該次搜索需要擺放的位置 x,y,以及待擺放的棋盤 即[x,y,A]
這樣不會導致所有的操作都在一個矩陣上進行

到此這篇關(guān)于python 非遞歸解決n皇后問題的方法的文章就介紹到這了,更多相關(guān)python 非遞歸n皇后內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

北海市| 湘阴县| 江阴市| 宜兴市| 桦川县| 诏安县| 崇左市| 江阴市| 五寨县| 宜宾县| 江城| 遵义市| 衡南县| 洪洞县| 聂拉木县| 北碚区| 巴林左旗| 彭山县| 阿城市| 洛南县| 宁乡县| 永登县| 曲沃县| 汕头市| 石柱| 仁化县| 若尔盖县| 报价| 宣汉县| 萨嘎县| 崇礼县| 郓城县| 福贡县| 沿河| 开鲁县| 新巴尔虎左旗| 桑植县| 梅州市| 西充县| 石棉县| 浦东新区|