洛谷题解 P1157 【组合的输出】

洛谷题解 P1157 【组合的输出】

题目

本人第一篇博客

非常明显,这是一道回溯的题目。

这个代码可分为三个部分:一个主程序,两个函数

主程序不必说,直接上代码

int main(){
    cin>>n>>r;
    search(1);
}

如此简单易懂

接下来就是两个函数:

第一个名为“search”,解析都在代码上了,自己看

int search(int k){
    int i;
    for(i=1;i<=n;i++)
    if(!b[i]&&i>a[k-1]){ //第一个判断是否使用过这个数,第二`在这里插入代码片`个判断为了保证后面的数大于前面的数 
        a[k]=i; //加入输出队列 
        b[i]=1; //标记使用过 
        if(k==r) print(); //输出函数 
        else search(k+1); //继续 
        b[i]=0; //很重要 ,如果删了那么就只剩了第一个数为 1 的序列 
    }
}

如果仔细看过上面的程序,会发现里面有一个print(),这就是后面的输出函数,输出的就是a数组里存的数

int print(){
    for(int i=1;i<=r;i++)
    cout<<setw(3)<<a[i]; //每个数字占三位 
    cout<<endl;  //记得换行 
}

The end! (看完点个赞吧)

你可能感兴趣的:(洛谷题解 P1157 【组合的输出】)