美文网首页
python笔试面试项目实战2020百练9八皇后

python笔试面试项目实战2020百练9八皇后

作者: python测试开发 | 来源:发表于2020-01-14 15:52 被阅读0次

八皇后

这是一个深受大家喜爱的计算机科学谜题:你需要将8个皇后放在棋盘上,条件是任何一个皇后都不能威胁其他皇后,即任何两个皇后都不能吃掉对方。怎样才能做到这一点呢?应将这些皇后放在什么地方呢?

这是一个典型的回溯问题:在棋盘的第一行尝试为第一个皇后选择一个位置,再在第二行尝试为第二个皇后选择一个位置,依次类推。在发现无法为一个皇后选择合适的位置后,回溯到前一个皇后,并尝试为它选择另一个位置。最后,要么尝试完所有的可能性,要么找到了答案。在前面描述的问题中,只有8个皇后,但这里假设可以有任意数量的皇后,从而更像现实世界的回溯问题。如何解决这个问题呢?如果你想自己试一试,就不要再往下读了,因为马上就会提供解决方案。

image.png
def conflict(state, next_x):
    next_y = len(state)
    for i in range(next_y):
        if abs(state[i] - next_x) in (0, next_y - i):
            return True
    return False


def queens(num=8, state=()):
    for pos in range(num):
        if not conflict(state, pos):
           if len(state) == num-1:  # 基线条件
              yield (pos,)
           else:  # 递归条件
              for result in queens(num, state + (pos,)):
                  yield (pos,) + result
                  
result = queens(8)

print(list(result))   

参考资料

相关文章

网友评论

      本文标题:python笔试面试项目实战2020百练9八皇后

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