问题:
N皇后代码
def dfs(chessboard, nums, row, n):if row == n:ans.append(nums[:])returnfor 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 Falsereturn Truen = 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[:])returnfor 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:continuenums[1][row] = col_blackif 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 Falsereturn Truen = 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打印有问题!!
