演算法習題---字串的全排序列

來源:互聯網
上載者:User

標籤:實現   int   i++   字元   ++   還需   和我   習題   ==   

一:什麼是全排列

排列:從n個元素中任取m個元素,並按照一定的順序進行排列,稱為排列;

全排列:當n==m時,稱為全排列;

比如:集合{ 1,2,3}的全排列為:

{ 1 2 3}

{ 1 3 2 }

{ 2 1 3 }

{ 2 3 1 }

{ 3 2 1 }

{ 3 1 2 }

我們可以將這個排列問題畫成圖形表示,即排列枚舉樹,比如為{1,2,3}的排列枚舉樹,此樹和我們這裡介紹的演算法完全一致;

二:全排列實現思路
(1)n個元素的全排列=(n-1個元素的全排列)+(另一個元素作為首碼);(2)出口:如果只有一個元素的全排列,則說明已經排完,則輸出數組;(3)不斷將每個元素放作第一個元素,然後將這個元素作為首碼,並將其餘元素繼續全排列,等到出口,出口出去後還需要還原數組;
三:代碼實現
//str是字串,n是由n個不同字串組成,k是處理下標從0-k的所有字串進行全排列void perm(char str[], int k, int n){    int i, j;    char temp;    if (k==0)    //輸出排列完畢的字串    {        for (j = 0; j <= n - 1; j++)            printf("%d", str[j]);    }    else    {        for (i = 0; i <= k;i++)    //對每一個字元嘗試一次做第一個排序字元        {            temp = str[k];    //交換,將每一個元素放在最後            str[k] = str[i];            str[i] = temp;            perm(str, k - 1, n);            temp = str[i];    //列印完畢,將數組還原            str[i] = str[k];            str[k] = temp;        }    }}

 

演算法習題---字串的全排序列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.