python八皇后问题,递归算法

python八皇后问题,递归算法

    • 问题描述
    • 思路
    • 代码
    • 运行结果

问题描述

在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,输出所有摆法。

思路

每个皇后都不处于同一行、一列,可以用一维数组来表示皇后的位置,如a[0]=3表示皇后在第一行第四列,用一维数组可以保证皇后不会在同一行中
判断冲突,如果同列,数组中的元素会有平相同,如果同斜线,2皇后位置的列差绝对值等于行差绝对值,用这种计算判断皇后是否在同一斜线上。

代码

#检查是否冲突
def check(board,row,col):
    i = 0
    while i < row:
        if abs(col-board[i]) in (0,abs(row-i)):
            return False
        i += 1
    return True
def EightQueen(board,row):
    blen = len(board)
    if row == blen:    
        print (board)
        return True
    col = 0
    while col < blen:
        if check(board,row,col):
            board[row] = col
            if EightQueen(board,row+1):
                pass
        col += 1
return False
a=[None]*8
EightQueen(a,0)

运行结果

python八皇后问题,递归算法_第1张图片python八皇后问题,递归算法_第2张图片
部分结果截图,八皇后问题摆法共92种。

你可能感兴趣的:(算法作业)