学习总结4

   日期:2024-12-27    作者:csf8p 移动:http://ljhr2012.riyuangf.com/mobile/quote/68875.html

假设开始为1,第二个位置有2和3两个数供选择,如果第2个数选择3,那么第3个数只能选2.返回第二步则可以选择2,又生成另一种排序。之前acm社团讲题时提到过这个算法,但没有代码演示,遂没有深究。但只对三个数进行全排列,用3个for循环也可以解决。代码如下

学习总结4

 

如果对4个数呢,4个for循环,对n个数呢?显然不行。

基于开头的思想,一条路走到黑到死胡同了,然后返回一步,再看看有没有其他路口,不行再退一步.....

先给出1~n(n<9)的全排类代码吧,边看边分析(其实我也不太熟悉,初学

 

就用n=3来举例。从main函数进入dfs函数,此时step=1,表示第一步。具体作用表示在于排列元素的标号,因为后面会有a[step]=i给排列列表赋值。此时book数组元素全为0,开始搜索。i=1,先判断book[i]是否等于0,此时进入赋值部分:a[1]=1,book[1]=1。接着递归dfs(step+1)对第二个元素处理,即找第一个元素的分支。此时book[i]=0,退出循环,i++。i==2,同上a[2]=2,book[2]=1.继续推则有

a[1]=1,a[2]=2,a[3]=3 .此时n=4,输出序列1 2 3.book[3]=0(路走到尽头了,i=3,不再进入循环,回到第二层搜索,book[2]=0,再次判断,book[i]=0 (i==3),于是a[2]=3,book[3]=1,再次进入下一层搜索搜索a[3]=2,book[2]=1,得到序列1 3 2.(有点绕晕了,越讲自己越迷糊。

来自网上搜到的dfs模板


 

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号