描述:
给定一个棋盘,求可以在棋盘上放置n个皇后的方案。对于放置皇后的位置,要求同一行同一列只能放置一个皇后。同时,斜向的45度方向也只能放置一个皇后。
#N皇后问题
def isValid(r,c,grid,n):
#检查列
for i in range(r):
if grid[i][c]=='Q':
return False
#检查左斜线
i=r-1
j=c-1
while i>=0 and j>=0:
if grid[i][j]=='Q':
return False
i-=1
j-=1
#检查右斜线
k=r-1
p=c+1
while k>=0 and p<n:
if grid[k][p]=='Q':
return False
k-=1
p+=1
return True
def Queens(n):
#先构建棋盘
grid=[['.'for _ in range(n)]for _ in range(n)]
res=[]
def dfs(row):
if row==n:
#收集答案
res.append(["".join(r) for r in grid])
for i in range(n):
if isValid(row,i,grid,n): #当前位置是否能放置皇后
grid[row][i]='Q'
dfs(row+1)
grid[row][i]='.'
dfs(0)
print(res)
return res
def main():
n=int(input())
Queens(n)
if __name__=="__main__":
main()