zoukankan      html  css  js  c++  java
  • C++递归方法实现全排列

    #include<iostream>
    using namespace std;
    void perm(int list[],int k,int m);//声明
    void perm(int list[],int k,int m)//调用
    {
        if(k==m)//相等则输出,总是输出最后一层。
        {
           for(int j=0;j<=m;j++)
           {
            cout<<list[j];
           }
           cout<<endl;
        }
        else
        {
         for(int i=k;i<=m;i++)
         {
          swap(list[k],list[i]);//第一层,先和自己换。1和1换,2和2换,3就相等然后输出了。输出后回来,2和3换。
          perm(list,k+1,m);
          swap(list[k],list[i]);//将前面换回的顺序再换回来,防止变顺序。
         }
        }
    }
    
    int main()
    {
        //char a[7]="123456";
        int a[3]={0,1,2};
        perm(a,0,2);
        system("pause");
        return 0;
    }

    逻辑顺序:

    第一层循环3次:

    k=0,i=k=0,list[0]和list[0]交换。然后递归调用k+1=1,2

    进入第二层,循环2次:

    k=1,i=k=1,list[1]和list[1]交换,然后递归调用k+1=2,2

    此时相等,输出结果,0,1,2(相当于没有循环或者循环1次)

    然后回到第二层,循环第二层的第2次

    k=1,i=k+1=2,list[1]和list[2]交换,然后递归调用k+1=2,2

    此时相等,输出0,2,1

    然后回到第一层,循环第一层的第2次,后面同次过程。

    step by step.
  • 相关阅读:
    Luogu3118:[USACO15JAN]Moovie Mooving
    Luogu4137:Rmq Problem/mex
    Luogu3092:[USACO13NOV]No Change
    BZOJ4321: queue2
    BZOJ4650 : [NOI2016]优秀的拆分
    webpack
    sublime eslint setup
    Sublime themes/ lint themes setup
    sublime text 3
    React
  • 原文地址:https://www.cnblogs.com/answer727/p/6942577.html
Copyright © 2011-2022 走看看