全排列的三種寫法

2021-06-21 11:38:58 字數 1321 閱讀 4283

給定n個不同的數,要求生成這n個數的全排列!

解法1:遞迴思想,首先選定第乙個數(有n種不同的選擇方式),然後對剩下的n-1個數進行全排列;根據此步驟,對剩下n-1數的全排列進行遞迴。

void permutation(vector& ivec, int level)

for(int i = level; i < ivec.size(); ++i)

}

解法2:列舉思想,想象有n個位置,每乙個位置可放置乙個數。對每乙個位置列舉各個數字。

void permutation(vector& ivec, vectorper, 

vector& ok, int level)

for(int i = 0; i < ivec.size(); ++i) }

}

int find(vector& ivec, int i)

int bsearch(vector& ivec, int beg, int val)

// stop when ivec[low] <= val or ivec[high] > val

return high;

}void permutation(vector& ivec)

;}

完整**+測試:

#include using namespace std;

class incr ;

int operator()() ;

private:

int beg;

};void permutation(vector& ivec, int level)

for(int i = level; i < ivec.size(); ++i) }

void permutation(vector& ivec, vectorper,

vector& ok, int level)

for(int i = 0; i < ivec.size(); ++i) }

}int find(vector& ivec, int i)

int bsearch(vector& ivec, int beg, int val)

// stop when ivec[low] <= val or ivec[high] > val

return high;

}void permutation(vector& ivec);}

void work()

int main()

全排列的三種實現

題目描述 生成由1至n個數的全排列。輸入 輸入包含多組樣例,每組樣例輸入乙個整數n 1 n 9 輸出 按照字典序反序輸出,每個數值之間用空格隔開。每個排列單獨佔一行。逆字典序 include include include int num 10 int visited 10 int n,t void...

總結 三種全排列演算法

1 遞迴演算法 演算法書上有詳細的解釋,複製如下 設r 是要進行排列的n個元素,ri r 集x中元素的全排列記為perm x ri perm x 表示在全排列perm x 的每乙個排列前加上字首ri得到的排列.r的全排列可歸納定義如下 當n 1時,perm r r是集合r中唯一的元素.當n 1時,p...

全排列的兩種寫法

對於陣列 1,2,3 他們按照從小到大的全排列是 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 現在給你乙個正整數n,n小於8,輸出陣列 1,2,n 的從小到大的全排列。由出口遞迴回溯時,至少返回2層,第一次因為if語句,第二次因為不滿足for迴圈條件 include in...