```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