题目 1 :基础练习 2n皇后问题

解题思路
代码
def correctWhite(tmpWhite, row):
if arr[row][tmpWhite[row]] == 1:
for i in range(row):
if tmpWhite[i] == tmpWhite[row] or abs(tmpWhite[i] - tmpWhite[row]) == abs(i - row):
return False
return True
else:
return False
def correctBlack(tmpBlack, row, tmpWhite):
if arr[row][tmpBlack[row]] == 1 and tmpBlack[row] != tmpWhite[row]:
for i in range(row):
if tmpBlack[i] == tmpBlack[row] or abs(tmpBlack[i] - tmpBlack[row]) == abs(i - row):
return False
return True
else:
return False
def dfs_Black(tmpBlack, row):
if row == n:
ans.append(tmpBlack)
return
else:
for col in range(n):
tmpBlack[row] = col
if correctBlack(tmpBlack, row, tmpWhite):
dfs_Black(tmpBlack, row + 1)
def dfs_White(tmpWhite, row):
if row == n:
dfs_Black(tmpBlack, 0)
else:
for col in range(n):
tmpWhite[row] = col
if correctWhite(tmpWhite, row):
dfs_White(tmpWhite, row+1)
n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
tmpWhite = [None for _ in range(n)]
tmpBlack = [None for _ in range(n)]
ans = []
dfs_White(tmpWhite, 0)
print(len(ans))