这里以从5个数选3个数字为例:
法1:dfs
//从n个数字里面选取m个数
#include<bits/stdc++.h>
using namespace std;
int a[5]={1,2,3,4,5};
int vis[5]; //true表示被访问了
//从这五个数中选取3个数字(不考虑顺序)
void dfs(int x,int num){ //下标和个数
if(num==3){
for(int i=0;i<5;i++){
if(vis[i])
cout<<a[i]<<" ";
}
cout<<endl;
return;
}
//因为不考虑顺序,所以直接往后计算
for(int i=x;i<5;i++){
if(!vis[i]){
vis[i]=true;
dfs(i+1,num+1);
vis[i]=false; //回溯
}
}
}
int main(void){
dfs(0,0);
return 0;
}
结果:
法2:借用next_permutation()函数
//第二种:借助next_permutation()函数
//从5个数选3个
#include<bits/stdc++.h>
using namespace std;
int a[5]={1,2,3,4,5};
int main(void){
int vis[5]={0,0,1,1,1};
do{
for(int i=0;i<5;i++){
if(vis[i]) //a[i]==1也就是表示选择第几位的数
cout<<a[i]<<" ";
}
cout<<endl;
}while(next_permutation(vis,vis+5));
return 0;
}
结果: