问题 C: 【搜索】桐桐的组合
时间限制: 1 Sec 内存限制: 64 MB排列与组合是常用的数学方法,桐桐刚刚学会了全排列,就想试试组合,组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。
输入
两个整数n和r(1≤r≤n≤20)。
输出
输出所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。
样例输入
5 3
样例输出
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
#include <bits/stdc++.h> using namespace std; int n,m; int a[100]; int ans[100]; int vis[100]; void dfs(int now) { if(now==m+1) { for(int i=1;i<=m;i++) { printf("%3d",ans[i]); if(i==m) cout<<endl; } return; } else { for(int i=1;i<=n;i++) { if(vis[i]==0&&i>ans[now-1]) { ans[now] = i; vis[i] = 1; dfs(now+1); vis[i] = 0; ans[now] = 0; } } } } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { a[i] = i; } dfs(1); return 0; }