最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++回溯算法中子集問(wèn)題分析探討

 更新時(shí)間:2023年03月15日 09:13:02   作者:清風(fēng)何渡  
回溯法是一種選優(yōu)搜索法,按選優(yōu)條件向前搜索,以達(dá)到目標(biāo)。但當(dāng)探索到某一步時(shí),發(fā)現(xiàn)原先選擇并不優(yōu)或達(dá)不到目標(biāo),就退回一步重新選擇,這種走不通就退回再走的技術(shù)為回溯法,而滿(mǎn)足回溯條件的某個(gè)狀態(tài)的點(diǎn)稱(chēng)為回溯點(diǎn)

一、子集

子集問(wèn)題與其它問(wèn)題最大的不同就是:每次遞歸,不止考慮葉子節(jié)點(diǎn),而是考慮所有節(jié)點(diǎn)!

體現(xiàn)在代碼上,就是每次遞歸都先result.push_back(path);

class Solution {
private:
    vector<int> path;
    vector<vector<int>> result;
    void backtracking(vector<int>& nums,int index){
        result.push_back(path);
        if(index>=nums.size()) 
            return;
        for(int i=index;i<nums.size();i++){
            path.push_back(nums[i]);
            backtracking(nums,i+1);
            path.pop_back();
        }
    }
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        backtracking(nums,0);
        return result;
    }
};

二、子集II

本題與上題唯一的區(qū)別在于:輸入樣例有重復(fù)數(shù)字,但又要求結(jié)果不能重復(fù)

本題與組合總和II是一個(gè)套路,即:橫向遍歷不可重復(fù),縱向遍歷可重復(fù)

體現(xiàn)在代碼上,就是if(i>index&&nums[i]==nums[i-1]) continue;

class Solution {
private:
    vector<int> path;
    vector<vector<int>> result;
    void backtracking(vector<int>& nums,int index){
        result.push_back(path);
        if(index>=nums.size()) return;
        for(int i=index;i<nums.size();i++){
            if(i>index&&nums[i]==nums[i-1])
                continue;
            path.push_back(nums[i]);
            backtracking(nums,i+1);
            path.pop_back();
        }
    }
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        backtracking(nums,0);
        return result;
    }
};

三、遞增子序列

這題嚴(yán)格來(lái)說(shuō)并不是子集問(wèn)題,但是有一點(diǎn)希望和子集II對(duì)比一下,就是同一層元素不能重復(fù)的問(wèn)題,這一題因?yàn)樵夭荒芘判?,所以在判斷元素是否重?fù)的問(wèn)題上,并不能采用類(lèi)似于上一題的if(i>index&&nums[i]==nums[i-1]) continue;方法,而是應(yīng)該開(kāi)辟一個(gè)used數(shù)組記錄每一層元素是否已出現(xiàn)過(guò),其實(shí)上一題也能用這種方法,不過(guò)上一題沒(méi)這個(gè)必要

還要注意used數(shù)組開(kāi)辟的位置是在backtracking函數(shù)內(nèi)部,意思很明顯:used數(shù)組只管記錄本層元素,至于下一層元素,則要開(kāi)辟新的ued數(shù)組來(lái)記錄

class Solution {
private:
    vector<int> path;
    vector<vector<int>> result;
    void backtracking(vector<int>& nums,int index){
        if(path.size()>1){
            result.push_back(path);
            if(index==nums.size()) return;
        }
        int used[201]={0};//記錄本層元素是否重復(fù)使用,新的一層都會(huì)重新定義
        for(int i=index;i<nums.size();i++){
            if(used[nums[i]+100]==1||(!path.empty()&&nums[i]<path.back()))
                continue;
            used[nums[i]+100]=1;
            path.push_back(nums[i]);
            backtracking(nums,i+1);
            path.pop_back();
        }
    }
public:
    vector<vector<int>> findSubsequences(vector<int>& nums) {
        backtracking(nums,0);
        return result;
    }
};

到此這篇關(guān)于C++回溯算法中子集問(wèn)題分析探討的文章就介紹到這了,更多相關(guān)C++回溯算法子集內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Pipes實(shí)現(xiàn)LeetCode(195.第十行)

    Pipes實(shí)現(xiàn)LeetCode(195.第十行)

    這篇文章主要介紹了Pipes實(shí)現(xiàn)LeetCode(195.第十行),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++多線(xiàn)程實(shí)現(xiàn)TCP服務(wù)器端同時(shí)和多個(gè)客戶(hù)端通信

    C++多線(xiàn)程實(shí)現(xiàn)TCP服務(wù)器端同時(shí)和多個(gè)客戶(hù)端通信

    通訊建立后首先由服務(wù)器端發(fā)送消息,客戶(hù)端接收消息;接著客戶(hù)端發(fā)送消息,服務(wù)器端接收消息,實(shí)現(xiàn)交互發(fā)送消息。本文主要介紹了C++多線(xiàn)程實(shí)現(xiàn)TCP服務(wù)器端同時(shí)和多個(gè)客戶(hù)端通信,感興趣的可以了解一下
    2021-05-05
  • OpenCV實(shí)現(xiàn)更改圖片顏色功能

    OpenCV實(shí)現(xiàn)更改圖片顏色功能

    這篇文章主要為大家詳細(xì)介紹了如何利用OpenCV實(shí)現(xiàn)更改圖片顏色的功能,文中代碼介紹詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C++ 之 Asio 庫(kù)(全面解析)

    C++ 之 Asio 庫(kù)(全面解析)

    下面小編就為大家?guī)?lái)一篇C++ 之 Asio 庫(kù)(全面解析)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • C C++ 算法實(shí)例大全

    C C++ 算法實(shí)例大全

    這篇文章主要介紹了C C++ 算法實(shí)例大全,里面大量的實(shí)例介紹,學(xué)習(xí)c語(yǔ)言的朋友可以收藏
    2016-12-12
  • Qt實(shí)現(xiàn)右擊菜單項(xiàng)

    Qt實(shí)現(xiàn)右擊菜單項(xiàng)

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)右擊菜單項(xiàng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++選擇文件夾代碼的封裝

    C++選擇文件夾代碼的封裝

    這篇文章主要介紹了C++選擇文件夾代碼的封裝,實(shí)例展示了將選擇文件夾功能代碼封裝為一個(gè)類(lèi)并對(duì)其進(jìn)行實(shí)例化調(diào)用的過(guò)程,對(duì)于學(xué)習(xí)C++程序設(shè)計(jì)有不錯(cuò)的參考價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C語(yǔ)言中遞歸的實(shí)際應(yīng)用與經(jīng)典問(wèn)題

    C語(yǔ)言中遞歸的實(shí)際應(yīng)用與經(jīng)典問(wèn)題

    函數(shù)以及函數(shù)的遞歸調(diào)用是學(xué)習(xí)C語(yǔ)言必須要掌握的內(nèi)容,且遞歸作為經(jīng)典的算法思想被廣泛應(yīng)用于程序設(shè)計(jì)中,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中遞歸的實(shí)際應(yīng)用與經(jīng)典問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • C++ 頭文件系列(set)詳解

    C++ 頭文件系列(set)詳解

    一般而言,每個(gè)C++/C程序通常由頭文件和定義文件組成。頭文件作為一種包含功能函數(shù)、數(shù)據(jù)接口聲明的載體文件,主要用于保存程序的聲明,而定義文件用于保存程序的實(shí)現(xiàn) 。
    2017-02-02
  • Qt在vs2019中使用及設(shè)置方法

    Qt在vs2019中使用及設(shè)置方法

    這篇文章主要介紹了Qt在vs2019中使用及設(shè)置方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論

武川县| 德化县| 弥勒县| 天长市| 钟祥市| 泸定县| 丰城市| 许昌市| 台北县| 墨玉县| 通城县| 万安县| 奉贤区| 施秉县| 漳平市| 彭阳县| 上蔡县| 左云县| 新昌县| 大渡口区| 井冈山市| 江门市| 肥乡县| 奈曼旗| 上饶县| 瑞昌市| 政和县| 竹山县| 樟树市| 会昌县| 翁牛特旗| 新民市| 林西县| 红桥区| 四平市| 大同市| 墨玉县| 谷城县| 阿城市| 东港市| 肃南|