1221: 【搜索基础】N皇后问题
时间限制: 1 Sec 内存限制: 128 MB
提交: 84 解决: 35
[提交][状态][讨论版]
题目描述
N皇后问题
queen.pas/c/cpp
在N*N(1<N<=9)的棋盘上放置N个皇后而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上不能放置2个皇后),编程求解所有的摆放方法。
[输入格式]
一个整数n(1<n<=9)
[输出格式]
若有解,输出若干行,每行n个数,依次表示第i个皇后的列号
若无解,输出 “no”
[输入样例]
4
[输出样例]
2 4 1 3
3 1 4 2
来源
搜索专题
AC_CODE
def main(n):
col = [0 for i in range(13)]
ans = [0 for i in range(13)]
def println():
for i in range(n):
if i == 0:
print(ans[i], end='')
else:
print('', ans[i], end='')
print()
def check(r, c):
for i in range(r):
if col[i] == c or (abs(col[i] - c) == abs(i - r)):
return False
return True
def dfs(r):
if r == n:
println()
return
for c in range(n):
if check(r, c):
col[r] = c
ans[r] = c + 1
dfs(r + 1)
ans[r] = 0
dfs(0)
if __name__ == '__main__':
n = int(input())
if n == 2 or n == 3:
print('no')
else:
main(n)