前言:入驻社区的第127天,我终于要写自己的第一篇文章啦。全排列问题大佬们应该早就驾轻就熟了,可应该也有些初入算法的小蒟蒻(比如我),所以还是想写篇文章分享一下。有问题请大家多多指教,互相分享一下,嘴下留情Oooooo
题目:洛谷P1706
思路:使用深度优先搜索(DFS)配合回溯算法:
1. 维护一个路径数组记录当前排列
2. 使用标记数组避免重复选择数字
3. 递归终止条件:第n个位置排列完成,递归到n+1时
4. 每次递归选择未被使用的数字,递归后回溯状态
举一反三一下,找不到出处了,也是之前看到过的题目
题目大意:从1~n中选取r个数进行全排列,并统计总数
示例,1~4里选2个数进行排列,有如下12种可能
思路是一样的,就是把个数改为r个,直接上代码啦
关键点总结
1. 递归树构建:每个节点代表一个选择步骤
2. 状态标记:通过vis数组避免重复选择
3. 回溯机制:递归返回后必须撤销当前选择
希望通过本篇文章,大家对DFS+回溯在排列组合问题中的应用有了一定了解吧~