您的位置:首页 > 其它

全排列实现(递归实现深度优先搜索)

2017-08-15 11:06 127 查看
#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
=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【】数组,标记是否使用过即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: