解题思路:具体的都在代码的注释啦
注意事项:
参考代码:
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 人评分
P1002 (C语言代码)浏览:974 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:1090 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:560 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:560 |
C语言程序设计教程(第三版)课后习题10.7 指针(C语言代码)浏览:539 |
小九九 (C语言代码)浏览:500 |
采药 (C语言代码)浏览:921 |
Manchester- 求之N内的素数浏览:1494 |
WU-程序员的表白 (C++代码)浏览:754 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)(一般方法:辗转相除法)浏览:700 |