全排列实现(递归实现深度优先搜索)
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【】数组,标记是否使用过即可。