#include<stdio.h>
#include<string.h>
#define MX 10
char s[MX];//输入的字符串
char result[MX];//最终得到的字符串
int L;//输入的字符串的长度
int used[MX];// 0没用过 1 用过
void permutation(int n)
{
if(n==L)
{
result[L]=0;
puts(result);
return;
}
for(int i=0;i<L;i++){
if(!used[i]){
result[n]=s[i];
used[i]=1;
permutation(n+1);
used[i]=0;//取消第n个位置的摆放,让这个字符留给后面使用
}
}
}
int main()
{
gets(s);
L=strlen(s);
memset(used,0,sizeof(used));
permutation(0);
return 0;
}
运行结果如下:
abc
abc
acb
bac
bca
cab
cba
Process returned 0 (0x0) execution time : 4.353 s
Press any key to continue.
输入字符串默认安装ASCII大小顺序排序
深度优先搜索的基本模型
void dfs(int step)
{
//判断边界
//一般都是
if(step==n+1)
{
输出;
return;
}
//尝试每一种可能
for(i=1;i<=n;i++)
{
继续下一步
dfs(step+1);
}
}
如果对于枚举的数据不可重复的话,就加个book【】数组,标记是否使用过即可。