国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[算法日志]圖論: 深度優(yōu)先搜索(DFS)

這篇具有很好參考價值的文章主要介紹了[算法日志]圖論: 深度優(yōu)先搜索(DFS)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

[算法日志]圖論: 深度優(yōu)先搜索(DFS)

深度優(yōu)先概論

? 深度優(yōu)先搜索算法是一種遍歷圖這種數(shù)據(jù)結(jié)構(gòu)的算法策略,其中心思想是朝圖節(jié)點(diǎn)的一個方向不斷跳轉(zhuǎn),當(dāng)該節(jié)點(diǎn)無下一個節(jié)點(diǎn)或所有方向都遍歷完時,便回溯朝上一個節(jié)點(diǎn)的另一個方向繼續(xù)遍歷。這種搜索策略與回溯法有異曲同工之妙。

DFS的代碼框架

void dfs(參數(shù))
{
    if(終止條件)
    {
        儲存結(jié)果;
        return;
    }
    for(遍歷節(jié)點(diǎn)的各個分支)
    {
        處理節(jié)點(diǎn);
        dfs(參數(shù));//調(diào)用本函數(shù)
        撤銷處理,回溯;
    }
}

正因為和回溯法有相似之處,所以其在代碼結(jié)構(gòu)上與回溯大致相同。

深搜三部曲

  • 確認(rèn)遞歸函數(shù)及其參數(shù)

    ? 在深搜過程中,我們通常會定義兩個數(shù)組容器,一個二維數(shù)組儲存結(jié)果,一個一維數(shù)組儲存節(jié)點(diǎn)路徑。

    ? 而遞歸函數(shù)參數(shù)我們往往無法在一開始便確認(rèn),通常都是在書寫遞歸邏輯時按需添加。

  • 確認(rèn)終止條件

    ? 終止條件的不同有時會導(dǎo)致函數(shù)的需要遍歷的值不同。同時,遞歸條件如果確定錯誤會導(dǎo)致死循環(huán),棧溢出等錯誤。所以確定好遞歸條件是比較關(guān)鍵的一步。

  • 遍歷節(jié)點(diǎn)的各個路徑

    首先將本節(jié)點(diǎn)下一個要遍歷的節(jié)點(diǎn)放進(jìn)路徑,適當(dāng)處理后進(jìn)入遞歸函數(shù),回來時將該節(jié)點(diǎn)從路徑中取出,做回溯操作。

深搜的簡單應(yīng)用

leetcode 797

示例代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-775364.html

	void DFS1(const vector<vector<int>>& mygraph, vector<vector<int>>& result, vector<int>& path, int next)
	{
		if (mygraph[next].empty() || path.back() == mygraph.size() - 1)
		{
			if (path.back() == mygraph.size() - 1)
				result.push_back(path);
			return;
		}
		const int size = mygraph[next].size();
		for (int i = 0; i < size; ++i)
		{
			path.push_back(mygraph[next][i]);
			DFS1(mygraph, result, path, mygraph[next][i]);
			path.pop_back();
		}
	}
	vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& mygraph)
	{
		vector<vector<int>> result;
		vector<int> path;
		if (mygraph.empty())
			return result;
		path.push_back(0);
		DFS1(mygraph, result, path, 0);
		return result;
	}

到了這里,關(guān)于[算法日志]圖論: 深度優(yōu)先搜索(DFS)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【算法詳解 | DFS算法】深度優(yōu)先搜索解走迷宮問題 | 深度優(yōu)先圖遍歷

    【算法詳解 | DFS算法】深度優(yōu)先搜索解走迷宮問題 | 深度優(yōu)先圖遍歷

    by.Qin3Yu 本文需要讀者掌握 結(jié)構(gòu)體 和 棧 的操作基礎(chǔ),完整代碼將在文章末尾展示。 特別聲明:本文為了盡可能使用簡單描述,以求簡單明了,可能部分專有名詞定義不準(zhǔn)確。 棧相關(guān)操作可以參考我的往期博文: 【C++數(shù)據(jù)結(jié)構(gòu) | 棧速通】使用棧完成十進(jìn)制數(shù)轉(zhuǎn)二四八進(jìn)制數(shù)

    2024年02月03日
    瀏覽(19)
  • 第一周算法訓(xùn)練(dfs)(深度優(yōu)先搜索算法)

    第一周算法訓(xùn)練(dfs)(深度優(yōu)先搜索算法)

    dfs: 深度優(yōu)先搜索算法 ,是一種用于遍歷或 搜索樹或圖的算法 .沿著樹的深度遍歷樹的節(jié)點(diǎn),盡可能深的搜索樹的分支。當(dāng)節(jié)點(diǎn)v的所在邊都己被探尋過,搜索將回溯到發(fā)現(xiàn)節(jié)點(diǎn)v的那條邊的起始節(jié)點(diǎn)。這一過程一直進(jìn)行到已發(fā)現(xiàn)從源節(jié)點(diǎn)可達(dá)的所有節(jié)點(diǎn)為止。如果還存在未被

    2024年02月20日
    瀏覽(21)
  • Python 算法基礎(chǔ)篇:深度優(yōu)先搜索( DFS )和廣度優(yōu)先搜索( BFS )

    Python 算法基礎(chǔ)篇:深度優(yōu)先搜索( DFS )和廣度優(yōu)先搜索( BFS )

    深度優(yōu)先搜索( DFS )和廣度優(yōu)先搜索( BFS )是兩種常用的圖遍歷算法,用于在圖中搜索目標(biāo)節(jié)點(diǎn)或遍歷圖的所有節(jié)點(diǎn)。本篇博客將介紹 DFS 和 BFS 算法的基本概念,并通過實(shí)例代碼演示它們的應(yīng)用。 ???? ?? ?? ?? 深度優(yōu)先搜索( DFS )是一種用于遍歷或搜索圖或樹

    2024年02月07日
    瀏覽(53)
  • 深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)兩種算法c++

    深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)兩種算法c++

    深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)是一種用于遍歷或搜索樹圖的一種算法,在這個過程中保證圖或數(shù)的每個結(jié)點(diǎn)被訪問且僅被訪問一次,再按照每個結(jié)點(diǎn)訪問的順序不同分為深搜和廣搜。 本文只討論這兩種算法在搜索方面的應(yīng)用! 深度優(yōu)先搜索 ( Depth-First-Search,DFS )它 沿

    2024年02月13日
    瀏覽(20)
  • 圖的遍歷(搜索)算法(深度優(yōu)先算法DFS和廣度優(yōu)先算法BFS)

    圖的遍歷(搜索)算法(深度優(yōu)先算法DFS和廣度優(yōu)先算法BFS)

    從圖的某個頂點(diǎn)出發(fā)訪問遍圖中所有頂點(diǎn),且每個頂點(diǎn)僅被訪問一次。(連通圖與非連通圖) 1、訪問指定的起始頂點(diǎn); 2、若當(dāng)前訪問的頂點(diǎn)的鄰接頂點(diǎn)有未被訪問的,則任選一個訪問之;反之,退回到最近訪問過的頂點(diǎn);直到與起始頂點(diǎn)相通的全部頂點(diǎn)都訪問完畢; 3、若

    2024年01月17日
    瀏覽(26)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】搜索算法(深度優(yōu)先搜索 DFS和廣度優(yōu)先搜索 BFS)以及典型算法例題

    【數(shù)據(jù)結(jié)構(gòu)與算法】搜索算法(深度優(yōu)先搜索 DFS和廣度優(yōu)先搜索 BFS)以及典型算法例題

    【數(shù)據(jù)結(jié)構(gòu)與算法】系列文章鏈接: 【數(shù)據(jù)結(jié)構(gòu)與算法】遞推法和遞歸法解題(遞歸遞推算法典型例題) 【數(shù)據(jù)結(jié)構(gòu)與算法】系列文章鏈接: 【數(shù)據(jù)結(jié)構(gòu)與算法】C++的STL模板(迭代器iterator、容器vector、隊列queue、集合set、映射map)以及算法例題 【數(shù)據(jù)結(jié)構(gòu)與算法】系列文章鏈

    2024年04月13日
    瀏覽(31)
  • 如何實(shí)現(xiàn)一個簡單的深度優(yōu)先搜索(DFS)算法?

    如何實(shí)現(xiàn)一個簡單的深度優(yōu)先搜索(DFS)算法?

    前端入門之旅:探索Web開發(fā)的奇妙世界 記得點(diǎn)擊上方或者右側(cè)鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 歡迎來到前端入門之旅!這個專欄是為那些對Web開發(fā)感興趣、剛剛踏入前端領(lǐng)域的朋友們量身打造的。無論你是完全的新手還是有一些基礎(chǔ)的開發(fā)者,這里都將為你提供一

    2024年02月07日
    瀏覽(22)
  • 【Python搜索算法】深度優(yōu)先搜索(DFS)算法原理詳解與應(yīng)用,示例+代碼

    【Python搜索算法】深度優(yōu)先搜索(DFS)算法原理詳解與應(yīng)用,示例+代碼

    目錄 1 基本原理 2 DFS算法流程 3 時間復(fù)雜度 4 空間復(fù)雜度 5 DFS算法應(yīng)用案例: 5.1 解決路徑查找問題? 5.2 解決圖的連通性問題 5.3? 拓?fù)渑判?5.4? 在樹結(jié)構(gòu)中進(jìn)行深度遍歷 深度優(yōu)先搜索(DFS)是一種重要的圖遍歷算法,用于探索圖中的節(jié)點(diǎn)和邊。 DFS 是一種遞歸或棧(堆棧)

    2024年02月06日
    瀏覽(46)
  • 【圖論算法】深度優(yōu)先搜索的應(yīng)用

    【圖論算法】深度優(yōu)先搜索的應(yīng)用

    深度優(yōu)先搜索 (depth-first search)是對先序遍歷(preorder traversal)的推廣。我們從某個頂點(diǎn) v 開始處理 v,然后遞歸地遍歷所有鄰接到 v 的頂點(diǎn)。 對一棵樹的所有頂點(diǎn)的訪問需 O(|E|) 時間。對任意圖進(jìn)行該過程時則需要考慮避免圈的出現(xiàn)。為此,當(dāng)訪問一個頂點(diǎn) v 的時候,由于當(dāng)時已

    2024年02月08日
    瀏覽(90)
  • DFS(深度優(yōu)先搜索算法)入門保姆級超詳解

    DFS(深度優(yōu)先搜索算法)入門保姆級超詳解

    如題,本篇創(chuàng)作目的在于更精細(xì)化理解DFS的運(yùn)作,篇幅不長,也只是作者的一家之言,只為提供一個對入門者的更精細(xì)的解釋。 DFS,深度優(yōu)先搜索算法,首先我們看中文,可以很清楚的理解到這個算法是指搜索操作中優(yōu)先進(jìn)行深度也就是縱向的數(shù)據(jù)篩查。 看搜索的基本思路

    2024年02月07日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包