dfs秒了
2026-01-08 21:15:24
发布于:浙江
2阅读
0回复
0点赞
大家好,我是энтджей,今天是我2026年第二次正式发题解!
能不能点个赞
回归正题:
首先:
- 我看到这道题就是想到用dfs写
紧接着:
- 我们要找到dfs的入参:
- 确定下来,入参需要: 当前已经选了多少个数字(current )、上一个的数字(last number)、和一个用于输出的数组(这里用了vector)
- 即:
void dfs(int cur,int last,vector<int>& ve)
- 我们要确定dfs的终止条件:
- 也就是 使用的数字个数达到了k
- 即:
if(cur == r){ for(int i = 0;i < r;i++) cout << " " << ve[i]; cout << endl; return ; }
- 我们要递归一下了:
- 很简单,就是一个一个试数字:
- 即:
for(int i = last + 1;i <= n;i++){
ve.push_back(i);
dfs(cur + 1,i,ve);
ve.pop_back();
}
- 好那么差不多结束了,在正常输入一下和调用函数,打一下头文件和using,定义一下即:
#include<bits/stdc++.h>
using namespace std;
int n,r;
vector<int> ve;
int main(){
cin >> n >> r;
dfs(0,0,ve);
return 0;
}
那么好了!“合成”:
就是完整代码啦
#include<bits/stdc++.h>
using namespace std;
int n,r;
vector<int> ve;
void dfs(int cur,int last,vector<int>& ve){
if(cur == r){
for(int i = 0;i < r;i++) cout << " " << ve[i];
cout << endl;
return ;
}
for(int i = last + 1;i <= n;i++){
ve.push_back(i);
dfs(cur + 1,i,ve);
ve.pop_back();
}
}
int main(){
cin >> n >> r;
dfs(0,0,ve);
return 0;
}
🎉完结撒花🎉
这里空空如也




有帮助,赞一个