经典的DFS深度优先遍历算法,常看常思考。
#include <stdio.h>
#include<string.h>
int Mark[10];
int Element[10];
void dfs(int n,int pcur){
if(pcur==n){//递归出口
int i;
for(i=0;i<n;i++){
printf("%d",Element[i]);
}
printf("\n");
return;
}
else{
int j;
for(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;
}
引用自:https://blog.csdn.net/stm32c/article/details/100868812?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task