#include <stdio.h>
const int maxn = 22;
int n,r;
int p[maxn];
int hashtable[maxn] = { false };
void DFS(int index,int nowK)//index表示正在处理的节点,nowK表示已有节点个数
{
if (nowK==r)//递归边界为:当现有节点个数达到r,则打印p数组并返回上一层
{
for (int i = 1; i <= r; i++)
{
if (i != r)
printf("%d ", p[i]);
else
printf("%d\n", p[i]);
}
return;
}
if (index > n)//递归边界:已经处理到最后一个节点则返回上一层
return;
p[nowK+1] = index;
DFS(index + 1,nowK+1);//加入此节点
DFS(index + 1, nowK);//不加入此节点
}
int main()
{
scanf("%d %d", &n,&r);
DFS(1,0);//开始时处理第一个节点,已有节点个数为0
return 0;
}
算法笔记 【递归入门】组合的输出
最新推荐文章于 2021-08-12 11:03:00 发布