回溯法
dfs时把条件回溯到上一个节点
1.求Cnm LC77
int vis[25];
vector<int> v;
vector<vector<int>> ans;
vector<vector<int>> combine(int n, int k) {
/*
CNM dfs一个没访问且大于i的数
*/
memset(vis,0,sizeof(vis));
dfs(1,0,n,k);
return ans;
};
void dfs(int num,int s,int n,int k){
if(s==k){
// cout<<"return"<<endl;
ans.push_back(v);
return ;
}
//找的数要比当前节点数大
for(int i=num;i<=n;i++){
if(!vis[i]){
// cout<<"num "<<i<<endl;
// cout<<"s "<<s<<endl;
v.push_back(i);
vis[i]=1;
dfs(i,s+1,n,k);
v.pop_back();
vis[i]=0;
}
}
};
2.求Anm LC46
vector<int> v;
vector<vector<int>> ans;
int vis[10];
int l;
vector<vector<int>> permute(vector<int>& nums) {
l=nums.size();
memset(vis,0,sizeof(vis));
dfs(0,nums);
return ans;
}
void dfs(int s,vector<int>& nums){
if(s==l){
ans.push_back(v);
return ;
}else{
//找的数从0开始找
for(int i=0;i<l;i++){
if(!vis[i]){
vis[i]=1;
v.push_back(nums[i]);
dfs(s+1,nums);
vis[i]=0;
v.pop_back();
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2021-09-13 STL中algorithm
2021-09-13 c++string类
2021-09-13 string.h函数
2021-09-13 高精度
2021-09-13 查找质数-欧拉筛法和埃氏筛