解题思路:
DFS


注意事项:
    代码改进:

        1.dfs内的赋值部分分开写可以缩短运行时间;

        2.这里判断王的坐标的方法比较笨,浪费了很多空间。

参考代码:

def dfs(row=0):
    global r, col_not_occupied, d_1, d_2, cnt
    cnt += 1 if row == r else 0

    for col in range(r):
        if col_not_occupied[col] and d_1[row - col] and d_2[row + col] and \
                map_[row][col]:
                    col_not_occupied[col], d_1[row - col], d_2[row + col] = [False for _ in range(3)]
                    dfs(row + 1)
                    col_not_occupied[col], d_1[row - col], d_2[row + col] = [True for _ in range(3)]


r, x, y = map(int, input().split())
cnt = 0
map_ = [[1 for _ in range(r)] for _ in range(r)]
col_not_occupied = [True for _ in range(r)]
d_1, d_2 = [[True for _ in range(2 * r - 1)] for _ in range(2)]
direction = [[0, 0], [1, 0], [-1, 0], [0, 1], [0, -1], [1, 1], [-1, -1], [1, -1], [-1, 1]]
for d in direction:
    if 0 <= x + d[0] - 1 < r and 0 <= y + d[1] - 1 < r:
        map_[x + d[0] - 1][y + d[1] - 1] = 0
dfs()
print(cnt)


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论