蓝桥杯 算法提高 8皇后·改Python(dfs 8皇后问题)

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大。
输入格式
  一个8*8的棋盘。
输出格式
  所能得到的最大数字和
样例输入
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
48 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64
样例输出
260
数据规模和约定
  棋盘上的数字范围0~99

分析:
经典的8皇后问题,借此复习一下dfs。
首先不看棋盘上面的数字,用一个temp列表来存放每一种皇后的摆放方法(初始化temp的长度),用valid函数来判断当前位置放置是否有效,详细思路在之前的博客里面写过,传送门

AC代码:

while True:
    try:
        s = []
        for i in range(8):
            s.append(list(map(int,input().split())))
        res = []
        temp = [None for i in range(8)]

        def valid(row,temp):
            for i in range(row):
                if temp[i] == temp[row] or abs(i-row) == abs(temp[i]-temp[row]):
                    return False
            return True

        def dfs(temp,row):
            if row == 8:
                res.append(temp[:])
                return
            else:
                for col in range(8):
                    temp[row] = col
                    if valid(row,temp):
                        dfs(temp,row+1)
        dfs(temp,0)
        ans = []

        for num in range(len(res)):
            result = 0
            for i in range(8):
                result += s[i][res[num][i]]
            ans.append(result)
        print(max(ans))
    except:
        break

编程小白,欢迎指点~

你可能感兴趣的:(蓝桥杯,dfs)