递归与非递归实现组合型代码
先放代码,非递归的目前理解不了,以后回来补!!!
非递归型:
#include<iostream> #include<queue> using namespace std; int a[30]; int main(){ int n,m; cin>>n>>m; for(int i=1;i<=m;i++) a[i]=i; a[0]=n-m; while(a[1]<=n-m+1){ for(int i=1;i<=m;i++){ cout<<a[i]<<" "; } cout<<endl; a[m]++; for(int i=m;i>=1;i--){ if(a[i]>n-m+i){ a[i-1]++; for(int j=i;j<=m;j++){ a[j]=a[j-1]+1; } } } } return 0; }
递归型:
#include<iostream> #include<vector> using namespace std; int n,m; int num=0; vector<int> v; vector<int> ans[100000]; void dfs(int index){ if(v.size()==m){ ans[num++]=v; return; } if(index==n) return; dfs(index+1); v.push_back(index+1); dfs(index+1); v.pop_back(); } int main(){ cin>>n>>m; dfs(0); for(int i=num-1;i>=0;i--){ for(int j=0;j<m;j++){ cout<<ans[i][j]<<" "; } cout<<endl; } return 0; }