算法初步拓展——八皇后问题

不知道你有没有下过国际象棋,国际象棋中有一种名为皇后的棋子,它的走法就是以它为中心,然后成一个星状放射出来,也就是以它为中心,然后横竖和两条斜杆。

八皇后问题就是在棋面上摆放八颗皇后棋子,然后让它们的走法不要冲突,也就是每一颗棋子的走法路径都独立。那么,这个摆放棋子的问题就成了一个算法问题。

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。我们来看一下如何用Python来解决这个问题:

def queen(A, cur=0):
    if cur == len(A):
        print(A)
        return 0
    for col in range(len(A)):
        A[cur], flag = col, True
        for row in range(cur):
            if A[row] == col or abs(col - A[row]) == cur - row:
                flag = False
                break
        if flag:
            queen(A, cur+1)
queen([None]*8)

这个是用python解决八皇后问题的一种方法,不知道你能不能看得懂,看不懂也无所谓,毕竟现在只是拓展一下知识面而已。

好的,今天的内容就讲到这里啦~

(文章图片和部分内容若有侵权,请联系作者删除)

猜你喜欢

转载自www.cnblogs.com/Galaxyfengfeng/p/9291973.html