主页 > 知识库 > python 非递归解决n皇后问题的方法

python 非递归解决n皇后问题的方法

热门标签:女王谷地图标注 西藏快速地图标注地点 百应ai电销机器人郑州 长春人工智能电销机器人官网 厦门crm外呼系统如何 地图标注推广单页 ai地图标注 如何在地图标注文字 n400电话申请多少钱

复杂度可能高了点- - 也没太注意

我想了好久 也找了好久 没看到什么能够用python解决n皇后问题而且不调用递归的 因为我不太能理解递归(尤其是到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+1n :
          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]
这样不会导致所有的操作都在一个矩阵上进行

到此这篇关于python 非递归解决n皇后问题的方法的文章就介绍到这了,更多相关python 非递归n皇后内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • python 使用递归回溯完美解决八皇后的问题
  • Python八皇后问题解答过程详解
  • Python实现八皇后问题示例代码
  • python八皇后问题的解决方法
  • Python基于生成器迭代实现的八皇后问题示例
  • Python解决八皇后问题示例
  • python基于右递归解决八皇后问题的方法

标签:廊坊 渭南 黔东 内江 绵阳 亳州 兴安盟 拉萨

巨人网络通讯声明:本文标题《python 非递归解决n皇后问题的方法》,本文关键词  python,非,递归,解决,皇后,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《python 非递归解决n皇后问题的方法》相关的同类信息!
  • 本页收集关于python 非递归解决n皇后问题的方法的相关信息资讯供网民参考!
  • 推荐文章