从n个数里选r个数组合
#include<stdio.h>
#include<string.h>
int n,r;
int a[11];
int vis[11];
void dfs(int step)
{
if(step==r+1)
{
for(int i=1;i<=r;i++)
printf("%d",a[i]);
printf("\n");
return;
}
for(int i=n;i>0;i--)
{
if(vis[i]==0 && i<a[step-1])
{
vis[i]=1;
a[step]=i;
dfs(step+1);
vis[i]=0;
}
}
}
int main()
{
a[0]=1000;
scanf("%d %d",&n,&r);
memset(vis,0,sizeof(vis));
dfs(1);
return 0;
}
本文介绍了一个使用C语言实现的从n个数中选取r个数的所有可能组合的递归算法。该算法通过深度优先搜索的方式生成所有组合,并利用标记数组避免重复选择同一个数。
860

被折叠的 条评论
为什么被折叠?



