dfs全排列

更新对全排列递归方法的理解

u是一个局部变量,它是用来指向每一条排列序列的元素的
st是全局变量数组,它能保证每一条单独的线路不发生重复

DFS全排列_全排列

如上图所示最初u是要从1到n(第一行的1、2、3)逐序遍历的,但是指向1的时候u要先进行深度,到达下一层的时候它想要向右走(1、2、_ ——> 1、3、_),但是又要先深度到下一层,直到最后一层后才可以回溯。

#include<bits/stdc++.h>
using namespace std;

int n, e[8], path[8], idx = 0;
bool st[8];

void dfs(int u){
    if(u == n){
        for(int i=0; i<n; i++)
            printf("%d ", path[i]);
        puts("");
    }
    
    for(int i=1; i<=n; i++){
        if(!st[i]){
            path[u] = i;
            st[i] = true;
            dfs(u + 1);
            st[i] = false;
        }
    }
}

int main(){
    cin >> n;
    dfs(0);
    
    return 0;
}