一、基本思想是用元素进入元组的先后表明行号,具体数值表明列号,注释很清楚了就不再说明,直接贴代码了
import time
def yesnot(state,nextX): # 判断下一个皇后在当前状态下时候可放
nextY = len(state) #存放已经放了几行
for i in range(nextY): #测试当前皇后与之前的是否冲突
if abs(nextX - state[i]) in (0,nextY - i): #abs(nextX - state[i])表明横向距离,in(0,nextY - i)表示0或extY - i,0表明在同一列上,(nextY - i)表明在斜线上只要一个相等返回错误
return False
return True #若未返回错误则新位置可放皇后,返回正确
def queen(state,num):
for i in range(num): #遍历寻找可以放的地点
if yesnot(state, i): #判断i点时候和以往皇后是否冲突
if len(state) == num - 1: #如果皇后数量时候已满
print(state + (i,)) #满足条件添加到元组并输出
else:
queen(state + (i,), num) #不冲突把新的皇后位置添加到元组进行递归
t = time.time() #程序开始时间
queen((),8) #运行八皇后问题,8是皇后数
t2 = time.time() #程序结束时间
print(t2-t) #程序运行时间
二、八皇后相同算法java版
三、我的程序运行12皇后时python版耗时13~14s,java版耗时400ms左右,不知道为什么相同代码python耗时远高于java,如果有大佬知道欢迎指导。我知道python运行会慢一些但是没想到慢这么多,如果30或者50,100皇后会有多大差距呢?