回溯法

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();
            }
        }
    }
}
posted @   lwx_R  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!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 查找质数-欧拉筛法和埃氏筛
点击右上角即可分享
微信分享提示