全排列實現

2021-07-09 05:14:00 字數 1599 閱讀 6723

參考的是《演算法競賽入門》p185

方法是用乙個額外的陣列a,不斷放入物件到這個陣列中,直到n個為止。

#include

using

namespace

std;

int total = 0;

void permutation(char* s,char* a,int n,int cur)

total++;

cout

<< endl;

}else

}if (ok)}}

}int main()

; char *a = new

char[5];

permutation(s, a, 3, 0);

cout

<< "total="

<< total << endl;

deletea;

return

0;}

如果需要按字典序輸出所有排列,實際上只需要先將陣列s先進行字典序排序,再呼叫該函式。

網上大多用的是一種基於每次與第乙個數交換的方法,來列舉所有排列

#include 

using

namespace

std;

int n = 0;

void swap(int *a, int *b)

void perm(int

list, int first, int m)

else}}

}int main()

; perm(list, 0, 2);

printf("total:%d\n", n);

return

0; }

前提是陣列s已經有序

更好的實現方法:

class solution 

for (int k = i; k < num.size(); k++)

}vector

> permuteunique(vector

&num)

};

遞迴實現全排列

生成全排列的最簡單的遞迴方法的思想 1.可以把幾個數字分成前半部和最後一位。對於0123這四個數來說,最後一位 紅色字型 所出現的情況只有以下四類 先不管前三個數的排列組合情況 3 2 1 0這樣我們就把四個數字的排列問題,變成了3個 對於上述的每一行來說 2.終結條件是1個數字的排列就是其本身。直...

python實現全排列

有1,2,3,4這4個數字,能組成多少個互不相同且無重複數字的三位數,下面是二種解決示例,需要的朋友可以參考下 第一種方法 遞迴 複製 如下 def perms elements if len elements 1 yield elements else for perm in perms elem...

遞迴實現全排列

1 如果運算力,和理亂麻的水平不夠。盡量不要復用本地變數 比如c用來計數,不計數後 又用來做其它比如作為步長 除非你確認不會出現問題。2 盡量讓每個邏輯單元 函式內可以有多個邏輯單元 盡量小,邏輯盡量要清晰 3 語言組織能力有限,就說這些了。未整理,抱歉了 include stdafx.h incl...