全排列 DFS

来源:互联网 发布:炒股入门 知乎 编辑:程序博客网 时间:2024/04/30 13:30
</pre><pre name="code" class="cpp">//DFS深度搜索 全排列 DFS参数总是要写当前需要考虑的位置 //ac.一开始DFS少了最后一个花括号,一直报错,后来把主函数提上去才发现 #include<cstdio>using namespace std;int n;int a[20];int f[20];//表示某个数是否已经在队列中 void show();void DFS(int k);int main(){scanf("%d",&n);DFS(0);//当前需要考虑的下标return 0;}void show(){for(int i=0;i<n;i++){printf("%d%c",a[i],i==n-1?'\n':' ');}}void DFS(int k){if(k==n) show();//k++;//查找当前要确定的位 else{for(int i=1;i<=n;i++){if(!f[i]){f[i]=1;a[k]=i;DFS(k+1);f[i]=0;//这一句一定要记得取消 } }}}

//注意。全排列这个函数,只能按照从小到大的顺序 #include<cstdio>#include<algorithm>int a[101];using namespace std;int main(){int n,r;scanf("%d%d",&n,&r);int num=n;for(int i=1;i<=n;i++){a[i]=i;}do{for(int j=0;j<r;j++){printf("%d",a[j]);}printf("\n");}while(next_permutation(a,a+r));return 0;//int a[10]={1,2,3};//do{//printf("%d%d%d\n",a[0],a[1],a[2]);//}while(next_permutation(a,a+3));//return 0;} 


0 0
原创粉丝点击