20分求助,各位大佬,我是个FW

P1157 组合的输出

```cpp for(int i=1;i<=n;i++){ if(vis[i]==0){ a[x]=i; vis[i]=1; dfs(x+1); vis[i]=0; } } ``` 这一段如果i从1到n一直枚举就会有重复
by HaIall @ 2023-08-21 20:52:03


所以第一位要从前一位的下一个一直枚举到n,就能避免重复
by HaIall @ 2023-08-21 20:53:37


所以正确代码为 ```cpp void dfs(int x){ if(x>r){ for(int i=1;i<=r;i++){ cout<<setw(3)<<a[i]; } cout<<endl; return; } for(int i=a[x-1]+1;i<=n;i++){ if(vis[i]==0){ a[x]=i; vis[i]=1; dfs(x+1); vis[i]=0; } } } ```
by HaIall @ 2023-08-21 20:55:04


@[chenkuntao](/user/723596) 你去试试
by HaIall @ 2023-08-21 20:56:07


你这样例都过不了啊 if(vis[i]==0){ 这里的条件有问题,填入的数必须比前一个数大,所以应改成 vis[i] == 0 && a[x - 1] < j 本菜鸟冒着被大佬喷的风险献上计谋
by lxy_c132 @ 2024-02-26 12:27:31


@[chenkuntao](/user/723596)
by lxy_c132 @ 2024-02-26 12:28:17


@[lxy_c132](/user/1049281) 抱歉,是 vis[i] == 0 && a[x - 1] < i
by lxy_c132 @ 2024-02-26 12:29:40


|