算法实践: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)
发布了129 篇原创文章 · 获赞 148 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/matafeiyanll/article/details/104850948