美文网首页
Python N皇后算法

Python N皇后算法

作者: 乱七八糟的心情 | 来源:发表于2019-03-05 09:30 被阅读0次

递归法

  • 用一个一维N元数组来存放每一行皇后的位置,这样就不存在行冲突了,只要判断哪一列可以放置就可以了,如果找到一个可以放置皇后的位置j后,则会递归探测下一行,结束后则会继续探测i行j+1列,故可以找到所有的N皇后的解。
class Solution:
    #最后mark数组里面标记的是皇后的位置,例如mark[0] = 2, 表示第一行皇后放在第3列的位置
    def make(self, mark):
        #初始化数组
        r = [['.' for _ in range(len(mark))] for _ in range(len(mark))]
        #将每一行中皇后的位置用‘Q’代替
        for i in mark:
            r[i][mark[i]] = 'Q'
        #枚举,将原来散的元素连接成字符串
        for k, v in enumerate(r):
            r[k] = ''.join(v)
        return r

    #递归函数,核心
    def recursive(self, mark, cur, ret):

        #如果当前行是最后一行,记录一个解,并返回上一级调用,继续探测
        if cur == len(mark):
            ret.append(self.make(mark))
            return

        #试探处理,将当前行的皇后应该在的位置遍历每一列,如果满足条件,递归调用处理下一行
        for i in range(len(mark)):
            mark[cur], down = i, True
            for j in range(cur):
                if mark[j] == i or abs(i-mark[j]) == cur - j:
                    down = False
                    break
            if down:
                self.recursive(mark, cur+1, ret)

    def solveNQueens(self, n):

        ret = []
        self.recursive([None]*n, 0, ret)
        return ret

enity = Solution()
print enity.solveNQueens(4)

相关文章

  • Python N皇后算法

    递归法 用一个一维N元数组来存放每一行皇后的位置,这样就不存在行冲突了,只要判断哪一列可以放置就可以了,如果找到一...

  • Python小白 Leetcode刷题历程 No.51-N

    Python小白 Leetcode刷题历程 No.51-No.55 N皇后、N皇后Ⅱ、最大子序和、螺旋...

  • 第16章 抽象深度优先搜索

    1、2n皇后问题 算法分析 与n皇后问题类似,如下是n皇后问题的分析,时间复杂度 按行继续比遍历,其中col[x]...

  • 每日一题:n queues

    题目:在n阶棋盘上放n个皇后,皇后在横竖斜都不能重复。分析:这是一道典型的回溯算法算法:1>如果当前的格子是可以放...

  • 面试题 08.12. N皇后问题 - Kotlin 解法

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

  • 回溯算法之八皇后问题

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

  • 算法笔记_07: 蓝桥杯练习 王、后传说

    引用 算法训练 王、后传说.大神用数组,用的出神入化啊。 8皇后以及N皇后算法探究 1. 问题描述 地球人都知道...

  • 算法(11):回溯法

    今天补一下回溯法,别的不说,n皇后问题必须列出来才行~ 目录:算法:附录算法(1):递归算法(2):链表算法(3)...

  • 算法02:N 皇后问题

    描述 整数 N 个皇后放在 N * N 的棋盘上,要求每个皇后不能相互攻击,即同一行、同一列、同一斜线上不能同时存...

  • 回溯算法 - N皇后问题

    回溯算法 实际上就是一个决策树的遍历过程 路径:已经做出的选择 选择列表:是你当前可以做的选择 结束条件:到达决策...

网友评论

      本文标题:Python N皇后算法

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