[演算法]全排列類問題

orchid發表於2014-10-12

對abc三個字元進行全排列的結果是abc,acb,bac,bca,cab,cba。一種實現思路可以描述如下:step1,確定第一位的字元,可以是a,b或者c。step2,第一個字元確定之後,對剩餘的字元求全排列。

C++實現如下:

void Permutation(char* chars,char* begin)
{
    if(*begin=='\0')
    {
        cout << chars << endl;
        return;
    }

    for(char* p=begin;*p!='\0';p++)
    {
        int temp=*p;   //第一位字元可以是,a,b或者c。通過交換實現。
        *p=*begin;
        *begin=temp;

        Permutation(chars,begin+1);  //對其餘字元求全排列。

        temp=*p;  //復原
        *p=*begin;
        *begin=temp;
    }
}

注意最後的程式碼,這三行程式碼把一次排列之後的結果恢復到排列前。

相關文章