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