题目 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))