zoukankan      html  css  js  c++  java
  • 集合的全排列问题

    全排列问题的递归算法(回溯算法)

     1 //产生元素k~m的全排列,作为前k-1个元素的后缀
     2 void Perm(int list[],int k,int m)
     3 {
     4     //构成了一次全排列,输出结果
     5     if(k==m)
     6     {
     7         for(int i=0; i<=m; i++)
     8             cout<<list[i]<<" ";
     9         cout<<endl;
    10     }
    11     else
    12         //在数组list中,产生元素k~m的全排列
    13         for(int j=k; j<=m; j++)
    14         {
    15             swap(list[k],list[j]);   //swap()是标准库函数,交换两个元素的值。
    16             Perm(list,k+1,m);
    17             swap(list[k],list[j]);
    18         }
    19 }

    列如:数组 list [] ={1,2,3,4,5,6},则调用Perm(list,0,3)就是产生元素1~4的全排列。

    一般情况下,k<m。该算法将list[k:m]中的每一个元素分别与list[k]中的元素交换,然后递归地计算元素list[k+1:m]的全排列,并将计算结果作为list[0:k]的后缀。

  • 相关阅读:
    loadOnStartup = 1
    TP复习8
    TP复习7
    TP复习6
    TP复习5
    TP复习4
    TP复习3
    TP复习2
    TP复习
    document.createElement("A");
  • 原文地址:https://www.cnblogs.com/pshw/p/4838836.html
Copyright © 2011-2022 走看看