算法实践:N皇后(递归)

N皇后

描述

输入一个正整数N,程序输出N皇后问题的全部摆法。

输入

输入皇后的个数n(n<=13)

输出

输出长度为n的正整数。

输出结果里的每一行都代表一种摆法。

行里的第i个数字如果是n,就代表第i行的皇后应该放在第n列。

皇后的行、列编号都是从1开始算。

样例

4
2413
3142

难度

中等,递归

解题思路

解法

采用分治递归解法,在n-1个皇后已经摆好的情况下摆第n个皇后,递归出口为全部摆好,输出解

代码

# N = 4
N = (int)(input())
solution = list(range(N))


def queen(n):  #在0~n-1个皇后已经摆好的情况下摆第k个皇后 
    global solution
    if (n == N):
        for i in range(N):
            print(solution[i], end='')
        print()
        return
    i = 1
    while i <= N:  # 尝试0-N列摆放
        k = 0
        while k < n:
            if (solution[k] == i or abs(solution[k] - i) == abs(n - k)):  # 发现同列跳出,发现对角线跳出
                break
            k += 1
        if (k == n):
            solution[n] = i
            queen(n + 1)
        i += 1

queen(0)
# print(solution)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值