python八皇后函数 python八皇后代码

Python用迭代(yield)和递归解决八皇后问题
国际象棋的皇后行走具有最高的灵活性,可以横、竖、斜共八个方向无限步行走 。你需要将国际象棋8个皇后放在棋盘上,条件是任何一个皇后都不能威胁其他皇后 , 即任何两个皇后都不能吃掉对方 。
分析:在棋盘的第一行尝试为第一个皇后选择一个位置,再在第二行尝试为第二个皇后选择一个位置,依次类推 。在发现无法为一个皇后选择合适的位置后,回溯到前一个皇后,并尝试为它选择另一个位置 。当八个皇后都放在棋盘上时即得到一种解 。
用元组(其他序列也可以)表示可能的解(或一部分),例如(1 , 3,5)表示当前共摆放了三个皇后,第一个皇后在1行1列,第二个皇后在2行3列 , 第三个皇后在3行5列 。

当前状态state,下一个皇后在下一行的next_x位置 , 根据皇后的行走规则,如果已有的皇后可以吃掉下一个皇后,则表示有冲突,否则没有 。
函数conflict定义:接受用状态元组表示的既有皇后的位置 , 并确定下一个皇后的位置是否会导致冲突 。
参数next_x表示下一个皇后的水平位置(x 坐标,即列),而next_y为下一个皇后的垂直位置(y 坐标,即行) 。这个函数对既有的每个皇后执行简单的检查:如果下一个皇后与当前皇后的 x 坐标相同或在同一条对角线上,将发生冲突,因此返回True ;如果没有发生冲突,就返回False。
abs(state[i] - next_x) in (0, next_y - i)表示两个皇后的水平距离为0或等于垂直距离时为真、否则为假 。

求高手解八皇后问题(python)pos是从0到num-1走python八皇后函数的
pos=0时程序走这一段python八皇后函数:
for result in queens(num, state(pos,)):
yield (pos,)result
就是先找第一个位置
python关于八皇后判断冲突函数的一些逻辑小问题代码确实不对falsepython八皇后函数的返回位置不对python八皇后函数,另外python八皇后函数你python八皇后函数的问题答案是在一条对角线说明两点连接的斜率为1或负1python八皇后函数 , 也就是横坐标相减的绝对值等于纵坐标相减
python解决八皇后算法global col#定义一些全局变量
global row
global pos_diag
global nag_diag
global count
def output():
''' 输出一种有效结果
'''
global count
print row
count= 1
def do_queen(i):
''' 生成所有正确解
@param i: 皇后的数目
'''
for j in range(0, 8):#依次尝试0~7位置
if col[j] == 1 and pos_diag[i-j 7] == 1 and nag_diag[i j] == 1: #若该行,正对角线,负对角线上都没有皇后,则放入i皇后
row[i] = j
col[j] = 0#调整各个列表状态
pos_diag[i-j 7] = 0
nag_diag[i j] = 0
if i7:
do_queen(i 1)#可递增或递减
else:
output()#产生一个结果 , 输出
col[j] = 1#恢复各个列表状态为之前的
pos_diag[i-j 7] = 1
nag_diag[i j] = 1
if __name__ == '__main__':
col = []#矩阵列的列表,存储皇后所在列,若该列没有皇后,则相应置为1 , 反之则0
row = []#矩阵行的列表,存放每行皇后所在的列位置,随着程序的执行,在不断的变化中,之间输出结果
pos_diag = []#正对角线,i-j恒定,-7~0~7,并且b(i) 7统一到0~14
nag_diag = []#负对角线,i j恒定,0~14
count = 0
for index in range(0, 8):#一些初始化工作
col.append(1)
row.append(0)
for index in range(0, 15):
pos_diag.append(1)
nag_diag.append(1)
do_queen(0)#开始递归,先放一个,依次递增 , 反过来,从7开始递减也可
print 'Totally have %d solutions!' % count
输出:
[0, 4, 7, 5, 2, 6, 1, 3]
[0, 5, 7, 2, 6, 3, 1, 4]
[0, 6, 3, 5, 7, 1, 4, 2]
[0, 6, 4, 7, 1, 3, 5, 2]
【python八皇后函数 python八皇后代码】[1, 3, 5, 7, 2, 0, 6, 4]
[1, 4, 6, 0, 2, 7, 5, 3]
[1, 4, 6, 3, 0, 7, 5, 2]
[1, 5, 0, 6, 3, 7, 2, 4]
[1, 5, 7, 2, 0, 3, 6, 4]
[1, 6, 2, 5, 7, 4, 0, 3]
[1, 6, 4, 7, 0, 3, 5, 2]
[1, 7, 5, 0, 2, 4, 6, 3]
[2, 0, 6, 4, 7, 1, 3, 5]
[2, 4, 1, 7, 0, 6, 3, 5]
[2, 4, 1, 7, 5, 3, 6, 0]
[2, 4, 6, 0, 3, 1, 7, 5]
[2, 4, 7, 3, 0, 6, 1, 5]
[2, 5, 1, 4, 7, 0, 6, 3]
[2, 5, 1, 6, 0, 3, 7, 4]
[2, 5, 1, 6, 4, 0, 7, 3]
[2, 5, 3, 0, 7, 4, 6, 1]
[2, 5, 3, 1, 7, 4, 6, 0]
[2, 5, 7, 0, 3, 6, 4, 1]
[2, 5, 7, 0, 4, 6, 1, 3]
[2, 5, 7, 1, 3, 0, 6, 4]
[2, 6, 1, 7, 4, 0, 3, 5]
[2, 6, 1, 7, 5, 3, 0, 4]
[2, 7, 3, 6, 0, 5, 1, 4]
[3, 0, 4, 7, 1, 6, 2, 5]
[3, 0, 4, 7, 5, 2, 6, 1]
[3, 1, 4, 7, 5, 0, 2, 6]
[3, 1, 6, 2, 5, 7, 0, 4]
[3, 1, 6, 2, 5, 7, 4, 0]
[3, 1, 6, 4, 0, 7, 5, 2]
[3, 1, 7, 4, 6, 0, 2, 5]
[3, 1, 7, 5, 0, 2, 4, 6]
[3, 5, 0, 4, 1, 7, 2, 6]
[3, 5, 7, 1, 6, 0, 2, 4]
[3, 5, 7, 2, 0, 6, 4, 1]
[3, 6, 0, 7, 4, 1, 5, 2]
[3, 6, 2, 7, 1, 4, 0, 5]
[3, 6, 4, 1, 5, 0, 2, 7]
[3, 6, 4, 2, 0, 5, 7, 1]
[3, 7, 0, 2, 5, 1, 6, 4]
[3, 7, 0, 4, 6, 1, 5, 2]
[3, 7, 4, 2, 0, 6, 1, 5]
[4, 0, 3, 5, 7, 1, 6, 2]
[4, 0, 7, 3, 1, 6, 2, 5]
[4, 0, 7, 5, 2, 6, 1, 3]
[4, 1, 3, 5, 7, 2, 0, 6]
[4, 1, 3, 6, 2, 7, 5, 0]
[4, 1, 5, 0, 6, 3, 7, 2]
[4, 1, 7, 0, 3, 6, 2, 5]
[4, 2, 0, 5, 7, 1, 3, 6]
[4, 2, 0, 6, 1, 7, 5, 3]
[4, 2, 7, 3, 6, 0, 5, 1]
[4, 6, 0, 2, 7, 5, 3, 1]
[4, 6, 0, 3, 1, 7, 5, 2]
[4, 6, 1, 3, 7, 0, 2, 5]
[4, 6, 1, 5, 2, 0, 3, 7]
[4, 6, 1, 5, 2, 0, 7, 3]
[4, 6, 3, 0, 2, 7, 5, 1]
[4, 7, 3, 0, 2, 5, 1, 6]
[4, 7, 3, 0, 6, 1, 5, 2]
[5, 0, 4, 1, 7, 2, 6, 3]
[5, 1, 6, 0, 2, 4, 7, 3]
[5, 1, 6, 0, 3, 7, 4, 2]
[5, 2, 0, 6, 4, 7, 1, 3]
[5, 2, 0, 7, 3, 1, 6, 4]
[5, 2, 0, 7, 4, 1, 3, 6]
[5, 2, 4, 6, 0, 3, 1, 7]
[5, 2, 4, 7, 0, 3, 1, 6]
[5, 2, 6, 1, 3, 7, 0, 4]
[5, 2, 6, 1, 7, 4, 0, 3]
[5, 2, 6, 3, 0, 7, 1, 4]
[5, 3, 0, 4, 7, 1, 6, 2]
[5, 3, 1, 7, 4, 6, 0, 2]
[5, 3, 6, 0, 2, 4, 1, 7]
[5, 3, 6, 0, 7, 1, 4, 2]
[5, 7, 1, 3, 0, 6, 4, 2]
[6, 0, 2, 7, 5, 3, 1, 4]
[6, 1, 3, 0, 7, 4, 2, 5]
[6, 1, 5, 2, 0, 3, 7, 4]
[6, 2, 0, 5, 7, 4, 1, 3]
[6, 2, 7, 1, 4, 0, 5, 3]
[6, 3, 1, 4, 7, 0, 2, 5]
[6, 3, 1, 7, 5, 0, 2, 4]
[6, 4, 2, 0, 5, 7, 1, 3]
[7, 1, 3, 0, 6, 4, 2, 5]
[7, 1, 4, 2, 0, 6, 3, 5]
[7, 2, 0, 5, 1, 4, 6, 3]
[7, 3, 0, 2, 5, 1, 6, 4]
Totally have 92 solutions!
关于python八皇后函数和python八皇后代码的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读