求组合实际上可以不用标记走过,可以利用下标来,往后走就是
顺便写了个组合并且全排列,这时候就需要flag记录了
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int num[12];
int mstate[12];
int n,r;
void dfs(int top,int numi){
if(top==r){
for(int k=0;k<top-1;++k) cout<<mstate[k]<<" ";
cout<<mstate[top-1]<<endl;
return;
}
for(int i=numi;i<n;i++){
mstate[top]=num[i];
dfs(top+1,i+1);
}
return;
}
int main(){
cin>>n>>r;
for(int i=0;i<n;i++) cin>>num[i];
sort(num,num+n);
dfs(0,0);
return 0;
}顺便写了个组合并且全排列,这时候就需要flag记录了
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int num[12];
int flag[12];
int mstate[12];
int n,r;
int mcount=0;
void dfs(int top){
if(top==r){
for(int k=0;k<top-1;++k) cout<<mstate[k]<<" ";
cout<<mstate[top-1]<<endl;
mcount++;
return;
}
for(int i=0;i<n;i++){
if(flag[i]!=1){
mstate[top]=num[i];
flag[i]=1;
dfs(top+1);
flag[i]=0;
}
}
return;
}
int main(){
cin>>n>>r;
for(int i=0;i<n;i++) cin>>num[i];
sort(num,num+n);
dfs(0);
cout<<mcount;
return 0;
}
0 回复
0 转发
0 喜欢
3 阅读



