问题:
N皇后代码
def dfs(chessboard, nums, row, n):
if row == n:
ans.append(nums[:])
return
for col in range(n): # 对于某行的各个列
if chessboard[row][col] != 0:
nums[row] = col # 第row行皇后所在的列数
if valid(nums, row):
dfs(chessboard, nums, row+1, n)
def valid(nums, row):
for i in range(row): # 第row行前面的行
# 不在同一列
# 不在对角线上(2, 2)...
if nums[i] == nums[row] or abs(nums[i]-nums[row]) == abs(row-i):
return False
return True
n = int(input())
chessboard = [[int(i) for i in input().split()] for _ in range(n)]
# print(chessboard)
ans = []
nums = [None for _ in range(n)]
dfs(chessboard, nums, 0, n) # 当前第0行,一共n行
print(len(ans))
print(ans)
2N皇后,简而言之就是有两个皇后,黑皇后和白皇后。
def dfs(chessboard, nums, row, n):
if row == n:
ans.append(nums[:])
return
for col_white in range(n): # 对于某行的各个列
if chessboard[row][col_white] != 0:
nums[0][row] = col_white # 第row行皇后所在的列数
for col_black in range(n):
if chessboard[row][col_black] == 0 or col_white == col_black:
continue
nums[1][row] = col_black
if valid(nums, row):
dfs(chessboard, nums, row+1, n)
def valid(nums, row):
for color in range(2):
tmp = nums[color]
for i in range(row): # 第row行前面的行
# 不在同一列
# 不在对角线上(2, 2)...
if tmp[i] == tmp[row] or abs(tmp[i]-tmp[row]) == abs(row-i):
return False
return True
n = int(input())
chessboard = [[int(i) for i in input().split()] for _ in range(n)]
# print(chessboard)
ans = []
nums = [[None]*n for _ in range(2)] # nums[0]代表白皇后列索引;num[1]代表黑皇后列索引
dfs(chessboard, nums, 0, n) # 当前第0行,一共n行
print(len(ans))
print(ans)
ans打印有问题!!