求问大佬,到底哪有问题,只有30分

P1157 组合的输出

@[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


|