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

C++回溯算法中的全排列問題分析探討

 更新時間:2023年03月15日 09:06:01   作者:清風(fēng)何渡  
遞歸中遇到一個問題全排列的問題,我看見回溯特別神奇,特此記錄一下。對比一下深度優(yōu)先搜索與廣度優(yōu)先搜索,個人感覺這里的回溯像是一種遞歸樹中的深度優(yōu)先搜索的算法,他不斷構(gòu)造往下延伸的深度,使其達(dá)到完全編列

一、全排列

全排列的特點就是:解放了index(每次遍歷都從0開始),但是解放index的同時,又捆綁了used數(shù)組,記錄已經(jīng)出現(xiàn)過的元素

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

二、全排列II

本題與全排列唯一不同在于需要去重這題與上一題唯一區(qū)別在于輸入樣例為可重復(fù)序列,且要求輸出樣例不重復(fù)

對于全排列問題,模板是設(shè)置used數(shù)組,只有used[i]==0時,才能選擇該元素

對于去重問題,模板是先對nums排序,再判斷nums[i]與nums[i-1]是否相等

根據(jù)全排列問題模板,設(shè)置used數(shù)組,只有used[i]==0時才可以選擇

根據(jù)去重模板,先對nums排序,再判斷nums[i]與nums[i-1]是否相等

但是全排列的去重沒那么簡單,因為全排列i是從0開始遍歷,因此還要記錄同一層當(dāng)前已經(jīng)訪問到哪兒了,同一層不可以重復(fù),但是同一樹枝可以重復(fù)

但是不必再設(shè)置index,因為used數(shù)組可以兼任這個功能

如果used[i-1]==1,說明在同一個樹枝訪問過nums[i-1],同一樹枝可以重復(fù)

如果used[i-1]==0,說明在同一層訪問過nums[i-1],同一層不可以重復(fù)

很繞~

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

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

相關(guān)文章

  • C++中的類擴(kuò)展之繼承和組合詳解

    C++中的類擴(kuò)展之繼承和組合詳解

    在C++中,類擴(kuò)展可以通過繼承、組合和裝飾模式實現(xiàn)。繼承可以實現(xiàn)對已有類的修改和擴(kuò)展,組合可以增加新的功能,裝飾模式則能夠在不改變原類的情況下為其添加新的功能。這些技術(shù)在C++程序設(shè)計中應(yīng)用廣泛,提高了程序的可擴(kuò)展性和可維護(hù)性
    2023-04-04
  • Qt中QPainter與坐標(biāo)的使用

    Qt中QPainter與坐標(biāo)的使用

    本文主要介紹了Qt中QPainter與坐標(biāo)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 類成員函數(shù)的重載、覆蓋與隱藏之間的區(qū)別總結(jié)

    類成員函數(shù)的重載、覆蓋與隱藏之間的區(qū)別總結(jié)

    以下是對類成員函數(shù)的重載、覆蓋與隱藏之間的區(qū)別進(jìn)行了詳細(xì)的總結(jié)分析,需要的朋友可以過來參考下。希望對大家有所幫助
    2013-10-10
  • C語言二維數(shù)組應(yīng)用實現(xiàn)掃雷游戲

    C語言二維數(shù)組應(yīng)用實現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語言二維數(shù)組應(yīng)用實現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++命名空間和缺省參數(shù)介紹

    C++命名空間和缺省參數(shù)介紹

    這篇文章主要介紹了C++命名空間和缺省參數(shù),使用命名空間的目的是對標(biāo)識符的名稱進(jìn)行本地化,以避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對這種問題的,缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個默認(rèn)值,更多詳細(xì)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容
    2022-01-01
  • 一波二叉樹遍歷問題的C++解答實例分享

    一波二叉樹遍歷問題的C++解答實例分享

    這篇文章主要介紹了一波二叉樹遍歷問題的C++解答實例分享,包括節(jié)點打印和轉(zhuǎn)換為鏡像等問題的解答,需要的朋友可以參考下
    2016-02-02
  • c語言中unsigned修飾符的使用

    c語言中unsigned修飾符的使用

    在C語言中,unsigned是一種無符號整數(shù)修飾符,本文主要介紹了c語言中unsigned修飾符的使用,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • C++中的繼承方式與菱形繼承解析

    C++中的繼承方式與菱形繼承解析

    這篇文章主要介紹了C++中的繼承方式與菱形繼承解析,繼承是類和類之間的關(guān)系,是代碼復(fù)用的重要手段,允許在保持原有類結(jié)構(gòu)的基礎(chǔ)上進(jìn)行擴(kuò)展,創(chuàng)建的新類與原有的類類似,只是多了幾個成員變量和成員函數(shù),需要的朋友可以參考下
    2023-08-08
  • C語言 奇偶排序算法詳解及實例代碼

    C語言 奇偶排序算法詳解及實例代碼

    這篇文章主要介紹了C語言 奇偶排序算法詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • C++實現(xiàn)折半插入排序(BinaryInsertSort)

    C++實現(xiàn)折半插入排序(BinaryInsertSort)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)折半插入排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評論

青岛市| 北川| 汝南县| 犍为县| 河津市| 阿荣旗| 双桥区| 吴江市| 商南县| 周口市| 宁河县| 宜君县| 建湖县| 贵定县| 徐州市| 宜章县| 武清区| 柳林县| 比如县| 滨海县| 邳州市| 怀安县| 吴江市| 阜新市| 涟水县| 丹凤县| 聊城市| 信阳市| 宜春市| 邵武市| 南部县| 文水县| 仙桃市| 泗洪县| 随州市| 邢台市| 大宁县| 临洮县| 铜川市| 青田县| 无极县|