题目描述
本题要求输出不同组合数,并且要求按照字典序输出
样例
输入样例:
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
dfs枚举,定义一个数组a[N],和一个bool类型元组st[N],标记1~n这之间的数其中的数i是否被加入a中;
递归枚举,for (int i = 1; i <= n; i ++ )
if (!st[i] && (u == 0||(u > 0 && i > a[u - 1])))
u==0时,随便加入i,若u不等于0,想加入下一个数必须保证加入的这个数比上一个数大
参考文献
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 27;
int n, m;
int a[N];
bool st[N];
void dfs(int u)
{
if (u > m) return;
if (u == m)
{
for (int i = 0; i < m; i ++ )
cout << a[i] << ' ';
cout << endl;
}
for (int i = 1; i <= n; i ++ )
{
if (!st[i] && (u == 0||(u > 0 && i > a[u - 1])))
{
st[i] = true;
a[u] = i;
dfs(u + 1);
st[i] = false;
}
}
}
int main()
{
cin >> n >> m;
dfs(0);
}