用dfs实现1到n的全排列

来源:互联网 发布:网络诈骗形式 编辑:程序博客网 时间:2024/06/01 09:33

用dfs实现1到n的全排列。
我的做法是从第一个位置开始,用dfs找每个位置的数就好,
在某个位置的时候,从小到大枚举1到n的所有数,如果碰到
某个数之前没被用到就在这个位置选择这个数,然后搜索下个
位置的数值。
我的代码如下:

#include<iostream>#include<cstring>using namespace std;int perm[10000],used[10000],num;void init(){int i;memset(used,0,sizeof(used));scanf("%d",&num);for(i=0;i<num;i++)perm[i]=i+1;}void out(){int i;for(i=0;i<num;i++){if(i)printf(" ");printf("%d",perm[i]);}printf("\n");}void dfs(int pos){int i;if(pos==num){out();return;}for(i=1;i<=num;i++)if(!used[i]){perm[pos]=i;used[i]=1;dfs(pos+1);used[i]=0;}}void permutation(){init();dfs(0);}int main(){permutation();}


 

0 0
原创粉丝点击