组合的输出 题解(lgP1157)

一看就是 dfs 然而窝并不会做

调了一个多小时才调出来。漏洞连篇。(第一次写的基本没有对的地方QAQ

题解见注释。

#include<bits/stdc++.h>
using namespace std;
int n,r,ans[22];
void dfs(int a,int b)//a 表示当前 dfs 到第 a 位, b 表示当前选了 b-1 个数。
{
    if(b>r)//注意不要写等号
    {
        for(int i=1;i<=r;i++)
        {
            printf("%3d",ans[i]);//输出答案
        }
        cout<<endl;//别忘了换行
        return;
    }
    for(int i=a;i<=n;i++)
    {
        ans[b]=i;//选择第 b 个数
        dfs(i+1,b+1);
    }
    return;
}
int main()
{
    cin>>n>>r;
    dfs(1,1);
    return 0;
}

 

posted @ 2020-11-21 20:21  樱雪喵  阅读(73)  评论(1编辑  收藏  举报