sample input
1 2 3
sample output
#include using namespace std;
const int len = 10;
int n;
int mat[len];
int result[len];
bool used[len]; //初始值為false,表示都沒有使用過
void solve(int level);
int main()
solve(0);
system("pause");
return 0;
}/*----------------------
操作的目的:普通選擇性組合排列
初始條件:
n:記錄選取資料的總位數
mat陣列:儲存選取資料
used陣列:標記是不是用過
result陣列:儲存已得到的結果
操作結果:
輸出result陣列,所有的選擇性組合排列
函式引數:
level:既代表遞迴的層次,也代表result陣列已經處理到第幾位了
一句話就是:把沒用過的數放到result陣列的第level位上
------------------------*/
void solve(int level)
{ if (level == n)
{ for (int i=0;i注意:根據例項知,輸出資料的時候,總是把所有資料都用過一邊,無論該數字是在自己之前還是之後。
體現在具體的**是在:
1、檢測是不是被用過,這裡引入used陣列
2、遞迴入口的for迴圈中,for (int i=0;i 所謂全排列,就是列印出字串中所有字元的所有排列。例如輸入字串abc,則列印出 a b c 所能排列出來的所有字串abc acb bac bca cab和cba。一般最先想到的方法是暴力迴圈法,即對於每一位,遍歷集合中可能的元素,如果在這一位之前出現過了該元素,跳過該元素。例如對於abc,第一位可以是... 所謂全排列,就是列印出字串中所有字元的所有排列。例如輸入字串abc,則列印出 a b c 所能排列出來的所有字串abc acb bac bca cab和cba。一般最先想到的方法是暴力迴圈法,即對於每一位,遍歷集合中可能的元素,如果在這一位之前出現過了該元素,跳過該元素。例如對於abc,第一位可以是... 記得 老趙之前在微博上吐槽說,有的人真是毫無長進,六年前某同事不會寫程式輸出全排列,昨天發郵件還是問我該怎麼寫,這時間浪費到我都看不下去了。那時候就很好奇全排列到底是什麼東西,到底有多難?今天覆習的時候終於碰到這題了,結果果然自己太渣,看了好久都沒明白,實現又是磕磕碰碰的。所以,就把它整理成筆記加深...全排列和全組合
全排列和全組合實現
全排列和全組合實現