首页 > 编程知识 正文

八皇后,八皇后问题python

时间:2023-05-04 06:45:31 阅读:196783 作者:2919

上一版程序当中,通过检查全部棋盘来判断冲突,效率低下,代码冗长,而且容易出错。

参考书上的代码,判断冲突的时候,只需要针对已经摆好的皇后和本次摆放的皇后挨个比较:

如果两者,在横轴(列)的数据之差等于0,则说明在同一列,如果等于两者在纵轴(行)之差,则说明在对角线上。


至于是否在同一行上面,代码在逻辑上进行了处理,如果一行摆了皇后,则往下一行再摆,从而避免了在同一行。


优化后的代码,简洁明快,令人拍案叫绝。而且效率是全比较的10倍!!!!


#encoding:utf-8import copydef initBorad():board=[];for _ in range(8):x=map( lambda x:x-x,range(8) )board.append(x)return boarddef checkAttackX(lx,ij):for x in lx:if abs(ij[1]-x[1]) in (0,abs(ij[0]-x[0])):return True;return False;def eightQueen():board=initBorad()allBoard=[]stack=[]i=j=0try:while True:while i < len(board):found=Falsewhile j < len(board):board[i][j]=1if (checkAttackX(stack,(i,j))==True):board[i][j]=0j+=1else:stack.append((i,j))found=Truei+=1j=0breakif found==False:i,j=stack.pop()board[i][j]=0j+=1allBoard.append(board)board=copy.deepcopy(board)i,j=stack.pop()board[i][j]=0j+=1except (Exception) as e:print "八皇后摆放完毕"return allBoardx=eightQueen()count=0for ie in x:count+=1print "n解法:"+str(count)for ii in ie:print ii

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。