嘤嘤嘤嘤嘤嘤嘤嘤嘤

def make(mark):

 

    '''

    标记皇后的位置,例如mark[0] = 2, 表示第1行皇后放在第3列的位置

    :param mark: 皇后的位置信息

    :return: 拼接好的结果

    '''

 

    #初始化数组

 

    r = [['X' 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 FourQueens(mark, cur, ret):

 

    '''

    深度优先搜索的方式求解四皇后问题

    :param mark:表示皇后的位置信息,例如[0,1,3,2]表示棋盘的第1行第1列,第2行第2列,第3行第4列,第4行第3列放置了皇后。例如[1, None, None, None]表示第1行第2列放置了皇后,其他行没有放置皇后。初始值为[None,None,None,None]

    :param cur:表示当前准备在第几行放置皇后,例如`cur=1`时,表示准备在第`2`行放置皇后。初始值为0

    :param ret:表示存放皇后摆放结果的列表,类型为列表。初始值为[]

    :return:无

    '''

 

    if cur == len(mark):

 

        #********* Begin *********#

 

        # 如果当前行是最后一行,记录一个解,并返回结束此次搜索

 

        ret.append(make(mark))

 

        return

 

        #********* End *********#

 

    #试探处理,将当前行的皇后应该在的位置遍历每一列,如果满足条件,递归调用处理下一行

 

    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:

 

            # 准备在下一行找能放置换后的位置

 

            FourQueens(mark, cur+1, ret)

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值