解题思路:
这道题其实和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 人评分
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:619 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:561 |
【计算两点间的距离】 (C语言代码)浏览:927 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:485 |
简单的for循环浏览:1496 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:544 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:350 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:866 |
矩阵乘方 (C语言代码)浏览:1079 |
C二级辅导-分段函数 (C语言代码)浏览:659 |