1.排列组合
排列:从n个元素中任取m个元素,按照一定的顺序排列起来,叫做m的全排列。
组合:从n个元素中任取m个元素为一组,m个数的组合。
注意: 排列有序,组合无序。
例:从[1,2,3]三个元素中任取两个元素进行排列组合:
排列的结果:[1,2] 、[1,3]、[2,1]、[2,3]、[3,1]、[3,2]
组合的结果:[1,2]、[1,3]、[2,3]
例题:n个元素的全排列,(n互不相同,即1,2,······n).
#include<iostream>
#include<cmath>
using namespace std;
//n个数全排列 :一定要知道在第几层,该数现在的状态,回溯时的状态
int n;
int a[1000];
bool flag[1000];
void dfs(int k){
if(k==n+1){ //递归结束条件,当到达第n+1层,代表第n层已经填完
for(int i=1; i<=n; i++){
cout<<a[i]<<" ";
}cout<<endl;
return;
}
for(int i=1; i<=n; i++){ //n个数字
if(flag[i]==0){ //当前数字没用过才可以排列
a[k]=i; //第k层(第k个位置)填数字i
flag[i]=1; //该