救救孩子=。=、为什么我这个会输出重复的

P1157 组合的输出

```cpp #include<iostream> using namespace std; int A[20],N,R; bool B[20]; void f(int n){ //n代表存放数字的下标 if(n==R){ //如果全部存放完毕,代表结束返回 for(int i=0;i<R;i++) {//-------------------这里注意开始和结束的下标 printf("%3d",A[i]); } cout<<endl; return; } for(int i=1;i<=N;i++){ if(B[i]==true&&(n>=1&&i>A[n-1]||n==0)){//-------------------这里注意:1.运算符的优先级,需加括号 2.要分n是否为0的情况,而不是是否为1的情况 A[n]=i;//----------------------------注意下标 B[i]=false; f(n+1); B[i]=true;//回溯 } } } int main(){ cin>>N>>R; for(int i=1;i<=N;i++) B[i]=true;//--------------注意开始和结束的下标 f(0); return 0;//--------------------(return 0是个好习惯) } ``` 不知道对不对(<ゝω・)☆
by wanggk @ 2021-04-23 16:10:38


@[wanggk王冠龛](/user/252664) 谢谢大佬,这题困扰我的就是下标,自己没怎么注意,谢谢!
by 衛宮士郎 @ 2021-04-23 19:07:26


@[wanggk王冠龛](/user/252664) 救救孩子=。=、为什么我这个会只会输出1遍!
by Asbintle @ 2021-10-05 13:56:14


@[Aspintle](/user/562178) 看下代码?
by wanggk @ 2021-10-05 20:21:05


@[Aspintle](/user/562178) 输出一遍有可能是dfs调用后没有将vis数组回溯掉(具体代码你发一下吧)
by wanggk @ 2021-10-05 20:22:34


@[wanggk王冠龛](/user/252664) ```cpp #include<bits/stdc++.h> using namespace std; int n,r; int arr[109]; void dfs(int ceng,int a){ if(ceng>n){ for(int i=1;i<=r;i++){ printf("%3d",arr[i]); } cout<<endl; return; } for(int i=a;i<=n;i++){ arr[ceng]=i; dfs(ceng+1,i+1); } } int main(){ cin>>n>>r; dfs(1,1); return 0; } ```
by Asbintle @ 2021-10-06 09:33:42


@[wanggk王冠龛](/user/252664) ~~习惯一下本蒟蒻的码风~~
by Asbintle @ 2021-10-06 09:37:06


@[Aspintle](/user/562178) `if(ceng>n)`改为`if(ceng>r)`这样就能过样例了(因为是n个数里选r个)
by wanggk @ 2021-10-06 12:53:00


@[wanggk王冠龛](/user/252664) 已AC,谢谢
by Asbintle @ 2021-10-06 13:52:40


|