深度优先搜索(DFS)是一种遍历算法,尽可能深地向子树中的结点搜索,直到达到一定的深度,再回溯到上层的结点,继续搜索未被访问的结点。
全排列问题
给定 4 个数 1 2 3 4,求他们所有可能的排列结果 。
代码
#include <stdio.h>
void dfs(int x);
int i;
int a[4];
int result[4] ; //保存排列结果
int flag[4] ; //标记
int main(void){
for (i = 0 ; i <4; i++){
a[i] = i+1;
result[i] = 0;
flag[i] = 0;
}
dfs(0);
return 0;
}
void dfs(int x){
if(x == 4){
for(i = 0 ; i < 4 ; i++ ){
printf("%d ", result[i]);
}
printf("\n");
return ;
}else{
for(int i = 0 ; i < 4; i++){
if(flag[i] == 0){
result[x] = a[i] ;
flag[i] = 1 ;
dfs(x+1);
flag[i] = 0 ;
}
}
}
}
运行结果