一个超简单的全排列问题
最近开始学习了一点dfs,做了一点水题.....
水题虽然是水题,但不做水题怎么做更难的题呢说的还挺有道理
然后呢,就写一哈我的一点心得体会
#include<bits/stdc++.h> using namespace std; int a[10],b[10]={0},n; void dfs(int step){ int i; if(step==n+1){ for(i=1;i<=n;i++){ printf("%d ",a[i]); } printf("\n"); return; } for(i=1;i<=n;i++){ if(b[i]==0){ b[i]=1; a[step]=i; dfs(step+1); b[i]=0; } } return; } int main(){ scanf("%d",&n); dfs(1); return 0; }
代码我也已经弄出来了,对大佬们来说弱智的一批,但对于我这种蒟蒻来说还是有一丢丢难度的,
怎么说呢,算法的思想我其实是能理解的,但在具体的实现过程中我搞不懂为什么第一次排列出1 2 3,之后第二次会出现1 3 2,之后等等一些排列不同的数,然后我就debug了一下,终于发现了问题所在,这个排列的数字之所以每次都不一样是由这个for循环中的i来控制的,dfs函数从上一级跳出来之后,可能有的for循环还没有结束,所以还会在进行循环,这样就会导致每次排数的顺序不同,就是这么简单,但我居然没能很快的反应过来,真是太辣鸡了!!!!
来源:https://www.cnblogs.com/jljleo/p/11448778.html