從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使得...