解题思路:具体的都在代码的注释啦
注意事项:
参考代码:
a = [] #构造一个列表来存储所有情况的和
lists = [] #构造一个列表来存储输入的八行八列列表
for i in range(8): #此for循环用来输入
b = list(map(int,input().split()))
lists.append(b)
def queen(A,cur=0):#定义一个queen函数,传入两个变量,A是一个列表,cur是当前所在的行数
sums = 0
if cur == len(A): #如果当前的行数是第九行,也就是已经超过最后一行了,那么我们可以结束,并将A存入一个列表,方便之后计数
for i in range(len(A)):
sums += lists[i][A[i]]
a.append(sums)
return
for col in range(len(A)): #如果还没有完成所有行的遍历,那么我们执行这个for循环,col代表的是列数,从0,1,2开始,也就是我们现在从0,1,2开始摆放皇后
A[cur],flag= col,True #将A的第cur行的第col列赋值皇后
for row in range(cur): #这一步是开始对之前的行进行检查,比如我们已经到了第4行的皇后了,那我们需要对第1,2,3行的皇后进行考虑会不会违反规则
if A[row] == col or abs(col - A[row]) == cur - row: #具体的规则,前一个表示在同一列,后一个表示对角线
flag = False #如果这个成立,说明皇后不能摆在这个位置,所以跳出这个for循环,col值随之加一,继续循环,也就是在之后的列进行尝试
break
if flag:
queen(A,cur+1)
queen([None]*8) #queen作为一个函数,[None]*8则是代表一个列表,里面还有八个变量,即八皇后
print(max(a))
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复