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.
  • 相关阅读:
    算法竞赛入门经典训练指南——UVA 11300 preading the Wealth
    hiho一下 第148周
    ajax总结及案例
    Spring事务
    Struts2拦截器介绍
    Struts2的拦截器----Dog实例
    Struts2文件的下载
    Struts2文件的上传
    Struts2类型转换
    Struts2 属性驱动、模型驱动、异常机制
  • 原文地址:https://www.cnblogs.com/answer727/p/6942577.html
Copyright © 2011-2022 走看看