遞迴,非遞迴生成陣列的所有排列

2021-06-28 08:46:18 字數 1060 閱讀 1704

#include #include #include using namespace std;

void showarr(int* arr, int len)

cout << endl;

}// 遞迴顯示組合

void recursivecomb(int arr, int len, int start)

if(start == len - 1)

for(int i = start; i < len; ++i)

recursivecomb(arr, len, start + 1);

swap(arr[start], arr[i]); }}

// 非遞迴顯示組合

void nonrecursivecomb(int arr, int len)

stacks; // 棧中第i個元素的值為ai,表示將陣列中的第i個元素與第ai個元素交換

s.push(0);

while(!s.empty())

while(!s.empty() && s.top() == len - 1)

// 換回原來的元素值

swap(arr[s.size() - 1], arr[s.top()]);

s.pop();

} if(!s.empty())

}}int main(int argc, char* argv)

; cout << "recursive:" << endl;

recursivecomb(arr, sizeof(arr) / sizeof(int), 0);

cout << "nonrecursive:" << endl;

nonrecursivecomb(arr, sizeof(arr) / sizeof(int));

return 0;

}

輸出結果:

recursive:

123132

213231

321312

nonrecursive:

123132

213231

321312

排列生成 遞迴

對於給定的n 1的集合,需要列印出該集合所有可能的排列。例如,如果這個集合是 a,b,c 那麼所有可能得排列是 1.a b c 2.a c b 3.b c a 4.b a c 5.c a b 6.c b a 即 a 加上 b,c 的所有排列 b 加上 a,c 的所有排列 c 加上 a,b 的所有排列...

全排列的遞迴與非遞迴

全排列是乙個十分基礎的概念,是一串有可比權值的元素出現的所有排列形式,例如 張全蛋 張蛋全 全張蛋 全蛋 張 蛋全張 蛋張全 就是張全蛋的全排列,所以我們發現全排列用來取名字是很不錯的,如果對每個漢字在名字中的權值做一 張表,再來一張可能出現的不同字同時出現在名字中的關聯權值表,那麼全排列可以算出一...

全排列 非遞迴

description 列出所有數字1到數字n的連續自然數的排列,要求所產生的任一數字序列中不允許出現得復數字。input 輸入 n 1 n 9 output 由1 n組成的所有不重複的數字序列,每行乙個序列。sample input 3 sample output 1 2 3 1 3 2 2 1 ...