排列和組合演算法是考查遞迴的常見演算法,這兩種演算法能用遞迴簡潔地實現。
本人在經過多次摸索和思考之後,總結如下,以供參考。
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 ...