AcWing 93. 递归实现组合型枚举
原题链接
简单
作者:
純路人
,
2021-04-04 10:52:42
,
所有人可见
,
阅读 1
C++ 代码
#include <stdio.h>
int n,max,pd[100],used[100];//pd判断是否使用过避免重复选择
void print()
{
int i;
for(i=1;i<=max;i++){
printf("%d ",used[i]);
}
printf("\n");
}
void dfs(int k,int z)
{
int i;
if(k==max)//个数已经到了就输出
{
print();
return;
}
for(i=1;i<=n;i++)
{
if(!pd[i])//没使用过就进去
{
pd[i]=1;//标记已经使用过了
if(i>used[k]){//大于之前的那个数才递归再选
used[k+1]=i;//记录选的数
dfs(k+1,z+1);//递归下一步
}
pd[i]=0;//重新标记为0
}
}
}
int main()
{
scanf("%d%d",&n,&max);
dfs(0,0);
return 0;
}