八皇后问题(Python实现)
来源:互联网 发布:手机健康体检软件 编辑:程序博客网 时间:2024/05/21 05:58
看《Python基础教程》,看到生成器一章,提到八皇后问题,没有继续往后看,自己试着写了一个。
八皇后问题是数据结构里面的经典问题,思路主要是利用回溯法,利用栈保留走过的路径,走过的路,入栈,走不通了,出栈,继续往下尝试。
思路比较简单,写个伪码没什么问题。但是写得时间比较长,要是面试的时候让你笔写个无BUG可运行版本,那还真得喊救命了
运行结果:能够打印出全部92种解法,只是判断冲突的办法,太low了...................
#encoding:utf-8import copydef checkAttack(array):for i in range(len(array)):x=sum(array[i])check="水平"+str(x)if (x>1):print checkreturn Truefor i in range(len(array)):x=[]for j in range(len(array)):x.append(array[j][i])y=sum(x)check="竖直"+str(y)if(y>1):print checkreturn Truefor i in range(len(array)):x=[]p=[]j=ik=0while j>=0 and k<=i:x.append(array[j][k])p.append(array[len(array)-1-k][len(array)-1-j])j-=1k+=1y=sum(x)q=sum(p)check="左对"+str((y,q))if y>1 or q>1:print checkreturn Truefor i in range(len(array)-1,-1,-1):x=[]p=[]j=ik=0while j<=len(array)-1:x.append(array[k][j])p.append(array[j][k])j+=1k+=1y=sum(x)q=sum(p)check="右对"+str((y,q))if y>1 or q>1:print checkreturn Truereturn Falsedef initBorad():board=[];for _ in range(8):x=map( lambda x:x-x,range(8) )board.append(x)return boarddef eightQueen():board=initBorad()allBoard=[]stack=[]i=j=0try:while True:while i < len(board):print (i,j)found=Falsewhile j < len(board):board[i][j]=1if (checkAttack(board)==True):board[i][j]=0j+=1else:stack.append((i,j))print "in stack"+str((i,j))found=Truei+=1j=0breakif found==False:i,j=stack.pop()board[i][j]=0print "out stack"+str((i,j)) j+=1for xp in board:print xpallBoard.append(board)print "目前找到:"+str(len(allBoard))x=copy.deepcopy(board)board=xi,j=stack.pop()board[i][j]=0j+=1except (Exception) as e:print ereturn allBoardx=eightQueen()count=0for ie in x:count+=1print "\n解法:"+str(count)for ii in ie:print ii
0 0
- 八皇后问题(Python实现)
- 八皇后问题python实现
- Python实现八皇后问题
- 爬山法实现 八皇后问题 (Python 实现)
- python实现八皇后问题(百练OJ:2754:八皇后)
- 用Python快速实现八皇后问题
- python-八皇后问题
- Python八皇后问题
- python 八皇后问题
- python-八皇后问题
- 八皇后python实现
- python实现八皇后
- Python实现八皇后
- 八皇后问题实现
- 八皇后问题(python版理解)
- 八皇后问题递归实现(C++)
- 八皇后问题(java实现)
- 八皇后问题(递归实现)
- samba config
- 软件测试人员与QA的区别
- 哈夫曼树——C++实现
- 内存调优
- 【noip停课集训,10.12】【#2training】
- 八皇后问题(Python实现)
- Mongodb总结2-Java版本的HelloWorld-CRUD例子
- HDR技术
- 前端基础学习总结151012
- Fragment
- HM各个类中保存的数据类型以及之间的联系
- C#服务器客户端通信简单实现
- Linux进程间通信——使用共享内存
- Hibernate 的<generator class="native"></generator>的不同属性含义