
#include <stdio.h>
#include<string.h>
int Mark[10];
int Element[10];
void dfs(int n,int pcur){
if(pcur==n){//递归出口
for(int i=0;i<n;i++){
printf("%d",Element[i]);
}
printf("\n");
return;
}
else{
for(int j=1;j<=n;j++){
//判断j是否被使用过;如若使用过,将不再放入Element[ ]数组中
if(!Mark[j]){
//放值
Element[pcur]=j;
//标记j已被使用
Mark[j]=1;
//递归,实现深搜
dfs(n,pcur+1);
//回溯部分,设置当前值并未被使用
Mark[j]=0;
}
}
}
}
int main(){
int n;
scanf("%d",&n);
//生成一个全为0的数组,用0,1标记dfs函数中j值是否被使用。0--->未被使用,1--->已使用。
memset(Mark,0,sizeof(Mark));
dfs(n,0);
return 0;
}
还写了一种也可以打印出所有的全排列,只是不是字典序。
void permu

博客探讨了如何使用深度优先搜索算法来生成所有可能的全排列,虽然这些排列不按字典序排列。
最低0.47元/天 解锁文章
905

被折叠的 条评论
为什么被折叠?



