P1157 组合的输出 题解

P1157 组合的输出 题解

题意

就是打印出有位数限制的全排列(按照字典序)

思考与借鉴

个人用DFS递归做完
但是看了别人的STL做法,对next_permutation有了更新的认识。(当时想用STL,但是不知道怎么实现,看了别人的就明白01数组的妙处了)
##我的代码

#include <bits/stdc++.h>
using namespace std;
int a[22],n,r;
void fun(int num,int p){//所在数字 及位置
    if(p>r){
        for(int j=1;j<p;++j)cout<<setw(3)<<a[j];
        cout<<endl;
        return;
    }
    if(p==1){
        for(int i=1;i<=n-r+1;++i){
            a[p]=i;
            fun(i,p+1);
        }
    }
    else {
        for(int ii=num+1;ii<=n;++ii){
            a[p]=ii;
            fun(ii,p+1);
        }
    }
}
int main(){
    scanf("%d %d",&n,&r);
    fun(0,1);
    return 0;
}

他人机智的STL做法

next_permutation加上0-1数组实现

https://www.luogu.com.cn/blog/tony12345678/solution-p1157

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值