题目来源: http://acm.pku.edu.cn/JudgeOnline/problem?id=1321
解题报告:
棋盘问题, 棋子摆放的位置只能是#, 且不能同行和同列. 由于我采用的是按行递增的顺序来搜索的, 因此不可能出现同行的情况, 对于同列的情况, 我设置了一个变量col[], 来保存列的访问状态, 对于之前访问过的列, 棋子是不能再放在这一列上的.
dfs(begin, num) 代表将第k-num棵棋子放在begin行上, 然后就剩下num-1棵棋子需要放在begin行下面. 当然, 可能存在第num棵棋子根本无法放在begin行上的情况, 对于这种情况, dfs就回溯到上一个dfs调用的地方, 重新开始, 而如果遇到num=1, 且第begin行的一些列可以放的话, 就将方案数相应增加.
....表达能力有限, 还是看代码吧

该博客介绍了如何解决一个棋盘问题,其中棋子必须放置在标记为'#'的位置,且不能在同一行或同一列。作者使用了深度优先搜索(DFS)策略,通过维护一个col[]数组记录列的访问状态,避免重复放置。当无法在特定行放置棋子时,DFS会回溯。代码示例中展示了如何实现这个算法,并在main函数中读取输入并输出可能的放置方案数量。
最低0.47元/天 解锁文章
998

被折叠的 条评论
为什么被折叠?



