您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python 非递归解决n皇后问题的方法

51自学网 2021-10-30 22:49:07
  python
这篇教程python 非递归解决n皇后问题的方法写得很实用,希望能帮到您。

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

我想了好久 也找了好久 没看到什么能够用python解决n皇后问题而且不调用递归的 因为我不太能理解递归(尤其是到n层时) 智商受限- -

import copydef 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 flagdef 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]
这样不会导致所有的操作都在一个矩阵上进行

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


解决使用OpenCV中的imread()内存报错问题
快速解决cv2.imread()读取图像为BGR的问题
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。