DFS-全排列问题
Posted 桃花涣小鱼干
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DFS-全排列问题相关的知识,希望对你有一定的参考价值。
全排列问题
完整代码:
#include<stdio.h>
int n;
int a[100], book[100];
void dfs(int step) {
if (step == n + 1) {
for (int i = 1; i <= n; i++)
printf("%d", a[i]);
printf("\\n");
return;
}
for (int i = 1; i <= n; i++) {
if (book[i] == 0) {
a[step] = i;
book[i] = 1;
dfs(step + 1);
book[i] = 0;
}
}
return;
}
int main(){
scanf("%d", &n);
dfs(1);
return 0;
}
核心代码(DFS部分):
void dfs(int step){
if(step==n+1){
for(int i=1;i<=n;i++)
printf("%d",a[i]);
printf("\\n");
return;
}
for(int i=1;i<=n;i++){
if(book[i]==0){
a[step]=i;
book[i]=1;
dfs(step+1);
book[i]=0;
}
}
return;
}
让我们来深究DFS内的具体过程
函数层数和每层函数保留的 i 相等
每一层函数往数组中放入的数即为 i
i 的大小也决定了是否能够继续for循环继续放数
return 的过程中必然将上层函数中放入的数收回
以上是关于DFS-全排列问题的主要内容,如果未能解决你的问题,请参考以下文章