Amos


私信TA

用户名:lvqiancheng

访问量:688

签 名:

等  级
排  名 28046
经  验 543
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校 大连海事大学
专  业

  自我简介:

解题思路:
回溯方法
注意事项:
逐行便利,所以判断是否可以放入数据的时候,可以不需要判断行的部分,而且循环检查的次数也减少。代码简洁
参考代码:

mapA=[[0]*8 for i in range(8)]
data=[list(map(int,input().split())) for _ in range(8)]
max_num=0
def check(row,column,mapA):
    x=row-1
    y=column-1
    for i in range(row+1):#检查列
        if mapA[i][column]==1:
            return False
    while x>=0 and y>=0:#检查左上角
        if mapA[x][y]==1:
            return False
        x-=1
        y-=1
    x=row-1
    y=column+1
    while x>=0 and y<8:#检查右上角
        if mapA[x][y]==1:
            return False
        x-=1
        y+=1
    return True
def DFS(row,map):
    if row==8:
        Max(mapA)
    else:
        for i in range(8):
            if check(row,i,mapA):
                mapA[row][i]=1 #放入皇后
                DFS(row+1,mapA) #递归
                mapA[row][i]=0 #回溯
def Max(map):
    global max_num
    sum=0
    for i in range(8):
        for j in range(8):
            if map[i][j]==1:
                sum+=data[i][j]
    if sum>max_num:
        max_num=sum
DFS(0,mapA)
print(max_num)


 

0.0分

1 人评分

  评论区

  • «
  • »