D


私信TA

用户名:ALS1111

访问量:19541

签 名:

等  级
排  名 51
经  验 10958
参赛次数 0
文章发表 132
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

这道题其实和n皇后的题没有太大的差别。

做法是这样的,首先找出黑皇后的所有结果(这里暂时不考虑白皇后)。

详细做法可参考我之间写的一篇文章,介绍很详细。https://blog.dotcpp.com/a/83292

那么单独考虑白皇后时结果和单独考虑黑皇后是一样的。

接下来写一个双重循环就好了。

找出黑皇后和白皇后在每一行摆放都不在同一位置的组合就OK了。


注意事项:

参考代码:

def dfs(A,cur):  
    global n  
    global Black  
  
    if cur == n:  
        Black.append(A[:])  #注意这里不要写成Black.append(A),会出错,具体什么原因还不太清楚
        return  
    for j in range(n):  
        if Marix[cur][j]:  
            A[cur] = j  
            for i in range(cur):  
                if A[i] == j or abs(j - A[i]) == cur - i:  
                    break  
            else:  
                dfs(A,cur+1)  
      
if __name__ == '__main__':  
    n = int(input())  
    Marix = [[int(j) for j in input().strip().split()] for i in range(n)]  
    Black = []  
    dfs([None]*n,0)  
    White = Black[:]  
  
    ans = 0  
    for i in range(len(White)):  
        for j in range(len(Black)):  
            for k in range(n):      #找出黑皇后和白皇后在每一行摆放都不在同一位置的组合
               if White[i][k] == Black[j][k]:  
                    break  
            else:  
                ans = ans+1  
    print(ans)


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区