不重複排列的生成

2021-07-23 04:36:21 字數 856 閱讀 3615

全排列的話比較好打。

可,當乙個集合中有許多重複的元素,如 如何生成不重複的排列?

易知答案只有乙個。

生成不重複排列,這很實用。

思想:把重複的數字不在看做多個元素,而是看做乙個元素的多個個數。

然後遞迴生成時,新增在答案裡的是次數的減少。

正確性:如果按照以上思路,那麼可以知道,每個因為我們把重複的元素當做乙個元素的多個來處理,那麼當乙個有重複的元素遞迴回來時,那麼這個整個重複的元素就已經完成了它的賦值給ans,例如:執行2 1 1 的時候 會再遞迴回2 1 0的位置,但此時就不會在新增一遍 1, 而如果是全排列的話, 2 個 1 是不同的元素,後乙個1 可能和 前乙個交換位置,還是2 1 1。

**:

#include 

#include

#include

#include

using

namespace

std;

const

int maxn = 100 + 1;

int n, m;

int num[maxn], ans[maxn];

int vis[maxn];

void init()

inline

void print()

void dfs(int x)

else}}

}int main()

if(!re)

}dfs(1);

return

0; }

return0;}

/*31 1 2

1 1 2

1 2 1

2 1 1

*/

全排列不重複

include include include using namespace std int h 256 define n 100 char indexss 儲存上乙個排列的值 重複的排列是相鄰的 void quanpaiwithoutrepety char a,int len,int index...

非重複組合排列(含重複數字時,生成不重複組合排列)

sample input 1 2 2 3 sample output 分析資料 這裡和不含重複資料生成全組合排列 是不同的,如果使用原 會出現重複的資料,主要原因是在遞迴的時候,會把那些重複的數字當作不同的數字利用,而平等對待,直接進行遞迴。我們要做的就是把相同的數區分出來,我們這裡可以引入乙個陣列...

生成不重複的0 1序列排列組合

在用隱列舉法解0 1型整數線性規劃時,需要生成對應於自變數個數的不重複的0 1序列的排列組合。下面是用乙個兩層迴圈實現生成0 1型整數線性規劃問題解空間的 def generatesequence n x 0 for i in range n xtran m 0while len x 2 n for...