排列和組合演算法 C語言經典實現

2021-05-31 22:03:19 字數 1367 閱讀 6569

排列和組合演算法是考查遞迴的常見演算法,這兩種演算法能用遞迴簡潔地實現。

本人在經過多次摸索和思考之後,總結如下,以供參考。

1 #include

2 #include

3 4

chararray = "abcd";

5 6

#define n  47

#define m  38

intqueue[n] = ;

9inttop = 0;

10intflag[n] = ;

11 12

voidperm(ints,intn)

13 20

21if(s == n)

22     

27         printf("

\t");

28return;

29     }

30 31

for(i = 0; i < n; i++)

32     

40     }

41 }

42 43

voidcomb(ints,intn,intm)

44 56         printf("

\t");

57return;

58     }

59 60     queue[top++] = array[s];

61     comb(s+1, n, m);

62     top--;

63     comb(s+1, n, m);

64 65 }

66 67

intmain()

68 perm():

abcd    abdc    acbd    acdb    adbc    adcb    bacd    badc    bcad    bcda

bdac    bdca    cabd    cadb    cbad    cbda    cdab    cdba    dabc    dacb

dbac    dbca    dcab    dcba

combination():

abc     abd     acd     bcd

排列組合演算法實現

全排列表示把集合中元素的所有按照一定的順序排列起來,使用p n,n n 表示n個元素全排列的個數。例如 的全排列為 123 132 213 231 312 321 共6個,即3!321 6。這個是怎麼算出來的呢?首先取乙個元素,例如取出了1,那麼就還剩下。然後再從剩下的集合中取出乙個元素,例如取出2...

c語言實現排列組合演算法問題

排列組合是演算法常用的基本工具,如何在c語言中實現排列組合呢?思路如下 首先看遞迴實現,由於遞迴將問題逐級分解,因此相對比較容易理解,但是需要消耗大量的棧空間,如果執行緒棧空間不夠,那麼就執行不下去了,而且函式呼叫開銷也比較大。1 全排列 全排列表示把集合中元素的所有按照一定的順序排列起來,使用p ...

c語言實現排列組合演算法問題

排列組合是演算法常用的基本工具,如何在c語言中實現排列組合呢?思路如下 首先看遞迴實現,由於遞迴將問題逐級分解,因此相對比較容易理解,但是需要消耗大量的棧空間,如果執行緒棧空間不夠,那麼就執行不下去了,而且函式呼叫開銷也比較大。1 全排列 全排列表示把集合中元素的所有按照一定的順序排列起來,使用p ...