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)