全排列 小結

2022-08-29 16:12:24 字數 1268 閱讀 8226

從n個不同元素中任取m(m≤n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m=n時所有的排列情況叫全排列。

如1,2,3三個元素的全排列為:

1,2,3

1,3,2

2,1,3

2,3,1

3,1,2

3,2,1

共3*2*1=6種 3!

方法一:

遞迴法

1

//**---遞迴

2 #include3 #include

4const

int max=11

; 5

intdeep,count;

6int

a[max];

7bool

visit[max];

8void dfs(int

count)

13 printf("\n"

);

14return ; //

返回到上一次的for迴圈中去

15}

16for(int i=1;i<=deep;i++)

23}

24}

25int

main()

26

34return

0;

35 }

方法二:

stl

1

//**---stl

2 #include3 #include4

using

namespace

std;56

intmain()7;

10 cin>>t;

11while(t--)

12while(next_permutation(a,a+n));20}

21return0;

22 }

方法三:

1

//演算法書上的感覺還行

2 #include 3

void f(int n,int *a,int

cur)412

else

13 24}

25}26}

27int

main()

2835

return0;

36 }

46 全排列 全排列 遞迴

遞迴的時候每次確定乙個位置的數字 nums陣列在遞迴過程中分為左右兩部分,左邊部分是已經確定好的部分,而右邊是待確定數字的部分。每次都嘗試用當前位置右邊的數字來交換當前數字以確定當前數字。題目可以使用collections來優化。詳見 class solution 遞迴過程中每次確定乙個位置的數,遞...

46 全排列 47 全排列II

46.全排列 這題和之前做的劍指offer上的字串全排列。一樣。分析 1 如果原始要排列的陣列順序為1 2 3 4,現在只要分別交換1 2,1 3,1 4然後對剩下的3個元素進行遞迴的排列。自己的code 100 class solution if start nums.size 1 return ...

輸出全排列(C 全排列函式)

請編寫程式輸出前n個正整數的全排列 n 10 並通過9個測試用例 即n從1到9 觀察n逐步增大時程式的執行時間。輸入格式 輸入給出正整數n 10 輸出格式 輸出1到n的全排列。每種排列佔一行,數字間無空格。排列的輸出順序為字典序,即序列a 1,a2,an 排在序列b1,b2,bn之前,如果存在k使得...