//dfs全排列
#include<stdio.h>
#include <string.h>
char temp[5] = {'A','B','C','D'};//seed
char visited[5] ;//
char out[5] ;//保存生成的字符串
int deep ;
int pos ;//out数组的位置
void print(){
printf("%s\n",out);
}
int dfs(int step){
int i ;
if (step>=4)//4表示字符串长度是4
print();
for ( i = 0 ; i < 4 ; i ++){
if (!visited[i]){
out[pos] = temp[i];
visited[i] = 1;
pos++;
dfs(step+1);
visited[i] = 0;//回溯
pos--;//回溯
}
}
}
int main(){
memset(visited , 0 ,sizeof(visited));
pos = 0;
dfs(0);
return 0;
}
我自己花时间画了一个比较形象的图,来帮助你们理解,全排列是怎么映射到树上并且怎么使用DFS来进行搜索和剪枝。希望有不对和可以补充的地方大家提给我。
如图是一个 3个字母ABC的全排列树。