涉及知识点:
1.当我想从1-n个数里面挑选出r个数来进行组合(不排列),就可以通过以下代码来实现
2.与全排列不同的是,我们在递归函数中加入了一个限制条件,即为,后面添加的数不能比前面添加的数小,因为组合不涉及排列,所以1,2,3,4和4,3,1,2没有区别。
3.学习视频:【信息学奥赛】深度优先搜索——排列组合_哔哩哔哩_bilibili
代码如下:
BEGIN{
r=3 #挑3个数来进行组合
n=6 #数组内共6个元素
for(i=1;i<=n;i++){visit[i]=1} #记录1-n之间数字被使用的情况,1是未被使用,0是被使用
for(i=1;i<=r;i++){temp[i]=" "} #存放组合的答案
for(i=1;i<=n;i++){arr[i]=i} #放从1-n的数
dfs(1)
}
function dfs(position,i){
if(position==r+1)
{
for(i=1;i<=r;i++)
{
printf temp[i]
}
print" "
return
}
#递归主体
for(i=1;i<=n;i++)
{
if(visit[i]==1&&i>temp[position-1])
{
temp[position]=arr[i]
visit[i]=0
dfs(position+1)
visit[i]=1
}
}
}