生成1 n的排列

2021-06-20 17:07:02 字數 512 閱讀 6654

摘自《演算法競賽入門經典》

按字典序生成1~n的全排列。

偽**:

void print_permutation(序列a, 集合s)

if(s為空)  輸出序列a;

else  按從小到大的順序依次考慮s的每個元素v

print_permutation(在a的末尾新增v後得到的新序列,   s-);

**:void print_permutation(int n, int *array, int cur)

int i, j, ok;

if(cur == n)else{

ok = 1;

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

for(j = 0; j < cur; j++){

if(array[j] == array[i])

ok = 0;

if(ok){

array[cur] = i;

print_permutation(n, array, cur+1);

生成1 n的全排列

一 不可重集 includeusing namespace std const int maxn 1000 5 void print n int n,int a,int cur a是儲存全排列的陣列,cur是插入的位置 if cur n for int i 0 i 二 可重集 可重集排列注意如果陣列...

演算法 生成1 n的排列

在暴力求解法中,我們常常要用上列舉一些簡單內容以便方便獲得解,若要輸出整數n的前n個整數的全排列,則按字典序輸出為 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 從中我們似乎發現了一些規律 先輸出以1開頭的排列,再輸出以2開頭的排列,然後是3 而在以1開頭的排列中,1的後一...

7 2 1 生成1 n的排列

問題描述 嘗試用遞迴的方法 先輸出所有以1開頭的排列,然後輸出以2開頭的排列,一直到輸出完以9開頭的排列。偽 void print permutation 序列 a,集合 s 由於集合s可以用序列a表示出來 遍歷1 n的所有數,只要a中沒有出現的元素即可使用,因此可以不使用s儲存剩餘元素的集合。由於...