全排列

一串字母完全不同的字符,输出出全排列。如ABC输出 ABC ACB BAC BCA CAB CBA;

用递归的方法:

将前面的元素依次固定,从后面进行交换,输出。

 

附上代码,用注释的形式解释

//n为字符长度,k为当前进行到的位数;
char a[105];
void cmp(int n,int k)
{
    if (k==n) 
        cout<<a<<endl;
    else
    {
        for (int i=k;i<n;++i)
        {
       //一开始是让它自己与自己交换,直到最后一项执行完才开始从后往前交换输出;
       //最后一项自己交换完之后,就会让最后一个元素和倒数第二个进行交换,然后往前依次进行;

            swap(a[i],a[k]); 
            cmp(n,k+1);
            swap(a[i],a[k]);  //递归完之后要换回来
        }
    }
}
int main ()
{
    int n;
    gets(a);
    n=strlen(a);
    cmp(n,0);

    return 0;
}

 

 

原文地址:https://www.cnblogs.com/blowhail/p/11153111.html