美文网首页
python 基础算法之八皇后问题

python 基础算法之八皇后问题

作者: __XY__ | 来源:发表于2017-07-08 15:17 被阅读0次

解决思路:递归/回溯

  • 首先是从数据结构的角度考虑如何记录摆放:
    既然就是棋盘,就很容易想到用二维元祖来解这个问题,但是再仔细想想,其实一维元组也是可以记录摆放方式的
    例如我用state[0] = 4 state[1] =2 表示第一行的皇后在第4列,第二行的皇后在第1列

算法思想

  • 创建一个ret=[],把所有成功的state都包进去,最后求ret
  • 关键就是state怎么求
  • 如果有八个子,我肯定每个位置都放一下,所以最外层应该是for循环
  • 放之前,我先想想这个位置能不能放,判断的函数用conflict()来表示
    -如果能放的话,我就放下来
    -看是不是最后一个子,如果不是,那么我这次的子后面的所有能放的都传给我
    -如果是最后一个子,那么我就这个结果yield回去

代码实现

def conflict(state,nextx):
    '定义冲突函数,state为元组,nextx为下一个皇后的水平位置,nexty为下一个皇后的垂直位置'
    nexty = len(state)
    for i in range(nexty):
        if abs(state[i]-nextx) in (0,nexty-i):#若下一个皇后和前面的皇后列相同或者在一条对角线上,则冲突
            return True
    return False
def queens(num=8,state=()):
    '八皇后问题,这里num表示规模'
    for pos in range(num):
        if not conflict(state,pos):#位置不冲突
            if len(state) == num - 1:#若是最后一个皇后,则返回该位置
                yield (pos,)
            else:#若不是最后一个皇后,则将该位置返回到state元组并传给后面的皇后
                for result in queens(num,state + (pos,)):
                    yield (pos,) + result

相关文章

  • python 基础算法之八皇后问题

    解决思路:递归/回溯 首先是从数据结构的角度考虑如何记录摆放:既然就是棋盘,就很容易想到用二维元祖来解这个问题,但...

  • 八皇后,回溯与递归(Python实现)

    八皇后问题是十九世纪著名的数学家高斯1850年提出 。以下为python语言的八皇后代码,摘自《Python基础教...

  • 回溯算法之八皇后问题

    问题描述 设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线...

  • 算法:八皇后问题

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。 问题的内容是在国际象棋棋盘上(8*8),放置八个皇后并...

  • [算法]八皇后问题

    问题描述: 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后...

  • 算法——八皇后问题

    利用回溯算法求解,话不多说直接上代码~

  • 2019-07-10 数据结构和算法(妙味杜鹏)

    八皇后 A *寻路 背包问题(动态规划方法) 背包问题(贪心算法)

  • 八皇后问题 Python实现

    八皇后问题 Python实现 田田田 八皇后问题:国际象棋棋盘是8 * 8的方格,每个方格里放一个棋子。皇后这种棋...

  • 八皇后和约瑟夫问题

    今天在写C语言报告的时候,收获了两种算法的实现,分别是八皇后和约瑟夫问题。 八皇后:总的来说,八皇后问题就是一种b...

  • 八皇后问题算法详解

    一 问题描述 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1...

网友评论

      本文标题:python 基础算法之八皇后问题

      本文链接:https://www.haomeiwen.com/subject/uptjhxtx.html