原题链接:蓝桥杯算法训练VIP-王、后传说
解题思路:
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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复