@[JXY04315611](/user/838953)
```cpp
#include <iostream>
#include <cstdio>
using namespace std;
int n,r,a[21],i;
bool b[21]={0};
void print(){
for(int i = 1;i <= r;i++)
printf("%3d",a[i]);
printf("\n");
}
void dfs(int u){
if(u>r){
print();
return;
}
for(int i=a[u-1]+1;i<=n;++i)
{
a[u]=i;
dfs(u+1);
}return ;
}
int main(){
scanf("%d%d",&n,&r);
dfs(1);
return 0;
}
```
by small_turtle @ 2023-02-10 12:30:12
把你的改了一下,这样子不用 b 数组判别是否走过,且不容易错
by small_turtle @ 2023-02-10 12:31:33
你的代码 `dfs(u+1)` 后还要加一句回溯 `a[u]=0`
by small_turtle @ 2023-02-10 12:34:29
因为你让 `a[u]=i`,搜完后你要回溯
by small_turtle @ 2023-02-10 12:35:17
@[JXY04315611](/user/838953)
by small_turtle @ 2023-02-10 12:35:38
@[small_turtle](/user/509525) 明白了,谢谢大佬
by JXY04315611 @ 2023-02-10 13:04:06
@[small_turtle](/user/509525)
```
for(int i=a[u-1]+1;i<=n;++i)
{
a[u]=i;
dfs(u+1);
}return ;
我不太懂这段啥意思
by JXY04315611 @ 2023-02-10 13:06:34
# [个人博客主页](https://www.ricemoon.cn/)
```cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
typedef pair<int, int> PII;
int n, r;
int path[30];
bool st[30];
void dfs(int u, int num)
{
if (u == r + 1)
{
for (int i = 1; i <= r; i ++) cout << setw(3) << path[i];
cout << endl;
}
for (int i = 1; i <= n; i ++)
{
if (!st[i] and i > num)
{
st[i] = true;
path[u] = i;
dfs(u + 1, path[u]);
st[i] = false;
path[u] = 0;
}
}
}
int main()
{
cin >> n >> r;
dfs(1, 0);
return 0;
}
```
by Roger_Spencer @ 2023-03-05 20:52:35