算法基础之排列数字

排列数字

  • 核心思想:DFS(一棵树)

    •   #include
        
        using namespace std;
        
        const int N =10;
        
        int n,m;
        int path[N];
        bool st[N];
        
        void dfs(int u){
            if(u==n){  //终止条件
                for(int i=0;i<n;i++) cout<<path[i]<<" ";
                puts(" ");
                return;
            }   
            for(int i=1;i<=n;i++ ){
                if(!st[i]){  //该数字没有被使用过
                    path[u] = i;  //加入到path数组
                    st[i] = true;  //标记已用过
                    dfs(u+1);  //递归
                  //path[u]=0;  //可以省略不写 因为下一次也会被覆盖
                    st[i] = false;  //还原
                }
            }
        }
        
        int main(){
            cin>>n;
            
            dfs(0);  //初始为0
            
            return 0;
        }
      

你可能感兴趣的:(算法,深度优先,图论)