06-6.3.3 圖的深度優先遍歷

👋 Hi, I’m @Beast Cheng
👀 I’m interested in photography, hiking, landscape…
🌱 I’m currently learning python, javascript, kotlin…
📫 How to reach me --> 458290771@qq.com


喜歡《數據結構》部分筆記的小伙伴可以訂閱專欄,今后還會不斷更新。🧑?💻
感興趣的小伙伴可以點一下訂閱、收藏、關注!🚀
謝謝大家!🙏

回顧樹的先根遍歷

void PreOrder(TreeNode *R)
{if (R != NULL){visit(R);  // 訪問根結點while (R還有下一個子樹T)PreOder(T);  // 先根遍歷下一棵子樹}
}

圖的深度優先遍歷-代碼實現

bool visited[MAX_VERTEX_NUM];  // 訪問標記數組void DFS (Graph G, int v)  // 從頂點v出發,深度優先遍歷圖G
{visit(v);  // 訪問頂點vvisited[v] = TRUE;  // 設已訪問標記for (w = FirstNeighbor(G, v); w >= 0; w = NextNeighbor(G, v, w))if (!visited[w])  // w為v的尚未訪問的鄰接結點{DFS(G, w);}  // if
}

如果是非連通圖,則無法遍歷所有結點
解決方法類似:完成遍歷之后,可以再進行一次掃描,如果發現有結點仍然是false,那就說明與之對應的結點是沒有被訪問過的
也就是要加上如下代碼之后再進行深度優先遍歷

void DFSTraverse(Graph G)  // 對圖G進行深度優先遍歷
{for(v = 0; v < G.vexnum; ++v)visited[v] = FALSE;  // 初始化已訪問標記數據for(v = 0; v < G.vexnum; ++v)  // 本代碼中是從v=0開始遍歷if(!visited[v])DFS(G, v);
}

深度優先遍歷序列

同一個圖的鄰接矩陣表示方式唯一,因此深度深度優先遍歷序列唯一
同一個圖的鄰接表表示方式不唯一,因此深度優先遍歷序列不唯一

此外,還有深度優先生成樹深度優先生成森林

圖的遍歷和圖的連通性

無向圖進行BFS/DFS遍歷
調用BFS/DFS函數的次數 = 連通分量數

對于連通圖只需要調用一次BFS/DFS


有向圖進行BFS/DFS遍歷
調用BFS/DFS函數的次數要具體分析

如果起始頂點到其他各頂點都有路徑,則只需調用一次BFS/DFS函數


對于強連通圖,從任一結點出發都只需調用一次BFS/DFS

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39725.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39725.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39725.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UE5.4新功能 - Texture Graph上手簡介

TextureGraph是UE5.4還在實驗(Experimental)階段的新功能&#xff0c;該功能旨在材質生成方面達到類似Subtance Designer的效果&#xff0c;從而程序化的生成一些紋理。 本文就來簡要學習一下。 1.使用UE5.4或以上版本&#xff0c;激活TextureGraph插件 2.內容視圖中右鍵找到…

萬字 | 菊花廠C語言編程10大規范

本文是大廠C代碼規范&#xff0c;有點長&#xff0c;有時間可以學習下。 1 代碼總體原則 1、清晰第一 清晰性是易于維護、易于重構的程序必需具備的特征。代碼首先是給人讀的&#xff0c;好的代碼應當可以像文章一樣發聲朗誦出來。 目前軟件維護期成本占整個生命周期成本的…

【INTEL(ALTERA)】為什么Nios? II構建流程報告無法在 Windows WSL 上確定程序大小?

目錄 說明 解決方法 說明 由于英特爾 Quartus Prime 專業版軟件 19.3 版中的 nios2-elf-stackreport 實用程序出現問題&#xff0c;nios2-elf-stackreport 實用程序確實如此 不報告程序大小或堆棧堆棧大小。 解決方法 要解決此問題&#xff0c;編輯 nios2-stackreport.pl …

1)并發事務的問題

1) 并發事務的問題&#xff1f; &#xff08;1&#xff09;讀“臟”數據 事務T1修改數據后T2讀取了該數據&#xff0c;但是T1撤消了修改&#xff0c; 事務T1進行了回滾&#xff0c;導致事務T2讀取的數據與數據庫中的數據不一致。&#xff08;2&#xff09;丟失修改 兩個事務…

面向對象(Java)

構造方法只能在對象實例化的時候調用 this可以作為方法參數&#xff0c;表示調用方法的當前對象 this可以作為方法返回值&#xff0c;表示返回當前對象 封裝 通過方法訪問數據&#xff0c;隱藏類的實現細節 static&#xff1a;類對象共享&#xff0c;類加載時產生&#xff0c;…

Qt 實戰(7)元對象系統 | 7.2、MOC(Meta-Object Compiler 元對象編譯器)

文章目錄 一、MOC1、MOC的作用2、MOC的工作原理3、MOC的使用方式4、MOC生成的文件結構 前言&#xff1a; 在Qt框架中&#xff0c;MOC&#xff08;Meta-Object Compiler&#xff09;是一個至關重要的工具&#xff0c;它負責處理Qt特有的元對象系統&#xff08;Meta-Object Syste…

蘋果電腦虛擬機運行Windows Mac環境安裝Win PD19虛擬機 parallels desktop19虛擬機安裝教程免費密鑰激活

在如今多元的數字時代&#xff0c;我們經常需要在不同的操作系統環境下進行工作和學習。而對于 Mac 用戶來說&#xff0c;有時候需要在自己的電腦上安裝 Windows 操作系統&#xff0c;以體驗更多軟件及功能&#xff0c;而在 Mac 安裝 Windows 虛擬機是常用的一種操作。下面就來…

自定義控件動畫篇(七)layoutAnimation與gridLayoutAnimation的使用

在Android中&#xff0c;LayoutAnimation 和 GridLayoutAnimation 是用來給布局內的子視圖添加動畫效果的。它們允許你對整個布局的顯示過程進行動畫處理&#xff0c;而不是單個視圖。 LayoutAnimation LayoutAnimation 可以應用于任何的布局管理器&#xff0c;如LinearLayou…

docker的安裝與基本使用

一.docker的安裝卸載 1.先安裝所需軟件包 yum install -y yum-utils2.設置stable鏡像倉庫 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3.安裝DOCKER CE yum -y install docker-ce docker-ce-cli containerd.io 4.驗…

深度Q網絡(DQN)算法技術博客

深度Q網絡&#xff08;DQN&#xff09;是一種將深度學習與強化學習相結合的算法&#xff0c;用于解決高維狀態空間的強化學習問題。本文將詳細介紹DQN算法的基本原理&#xff0c;關鍵公式以及具體的代碼實現。 一、DQN算法的基本原理 DQN算法是Q學習的一種擴展&#xff0c;利…

Prompt的萬能公式和優化技巧

文章目錄 前言一、萬能公式二、優化技巧1.設定角色2.設定目標和動機3.引導主觀回答4.預設條件5.做強調6.思維鏈&#xff08;COT&#xff09;7.巧用定界符 前言 隨著LLM的發展&#xff0c;能給我們帶來很多方便&#xff0c;但是又引出了一個新的問題就是我們該如何使用他們&…

通過9大步驟,幫助企業在數字化轉型中搭建數據分析的報表體系!

引言&#xff1a;在數字化轉型中&#xff0c;企業搭建數據分析的報表體系是一個系統性的過程&#xff0c;需要綜合考慮業務需求、數據來源、技術平臺等多個方面。此外從報表生命周期的角度來說&#xff0c;從產生、使用以及最后消亡退出體系&#xff0c;都需要通盤考慮&#xf…

Linux上快速定位Java代碼問題行

生產環境中&#xff0c;經常會遇到CPU持續飆高或內存、IO飆高&#xff0c;如何快速定位問題點是很多新手頭疼的問題&#xff0c;只能通過經驗和代碼推理&#xff0c;其實這里針對Java程序可以通過top和jstack命令&#xff0c;快速定位到問題代碼。 Top命令的輸出 具體定位之前…

k8s-第八節-Helm

Helm & 命名空間 介紹 Helm類似 npm,pip,docker hub, 可以理解為是一個軟件庫,可以方便快速的為我們的集群安裝一些第三方軟件。使用 Helm 我們可以非常方便的就搭建出來 MongoDB / MySQL 副本集群,YAML 文件別人都給我們寫好了,直接使用。官網 https://helm.sh/zh/ …

虛擬機與主機的聯通

本地光纖分配地址給路由器--》連結路由器是連結局域網--》由路由器分配IP地址 因此在網站上搜索的IP與本機的IP是不一樣的 1.windows查看主機IP地址 在終端輸入 2.linux虛擬機查看ip 3.主機是否聯通虛擬機ping加ip

Hadoop頁面報錯Permission denied: user=dr.who, access....

1、臨時解決 hdfs dfs -chmod -R 777 /這種方法&#xff0c;存在一個不足&#xff0c;就是后面重新創建的文件夾&#xff0c;頁面進行刪除的時候&#xff0c;依然報這個錯。 但是&#xff0c;對于應付緊急客戶需求&#xff0c;可以臨時用一下。 2、永久解決 查看頁面的Owner…

深度學習中,模型的構建和訓練過程中會用到多種函數

在深度學習中&#xff0c;模型的構建和訓練過程中會用到多種函數&#xff0c;這些函數在數據處理、模型定義、損失計算、激活以及優化等方面發揮著重要作用。以下是一些常見的深度學習模型中用到的函數&#xff1a; 1. 激活函數 Sigmoid函數&#xff1a;Sigmoid函數是一種非線…

為什么使用StartAI文生圖進行AI繪畫?

什么是文生圖&#xff1f; 文生圖是AIGC中一種先進的圖像生成技術&#xff0c;它能夠根據用戶輸入的文字描述&#xff0c;智能地生成相應的圖像。無論是抽象的概念&#xff0c;還是具體的物體&#xff0c;文生圖都能夠以驚人的準確性和藝術性呈現出來。 StartAI文生圖如何進行…

7 動態規劃

下面的例子不錯&#xff1a; 對于動態規劃&#xff0c;能學到不少東西&#xff1b; 你要清楚每一步都在做什么&#xff0c;劃分細致就能夠拆解清楚&#xff01; xk. - 力扣&#xff08;LeetCode&#xff09; labuladong的算法筆記-動態規劃-CSDN博客 動態規劃是一種強大的算法…

【計算機視覺系列實戰教程 (實戰03)】:提取兩點之間的邊緣點

1、目的 圖像中任意兩點&#xff08;起點到終點&#xff09;之間&#xff0c;提取由深色到淺色&#xff08;或由淺色到深色&#xff09;的第一個邊緣點。這樣有利于精確地提取指定區域內的圖像邊緣。 經實踐證明&#xff1a;本算法能夠有效地定位兩點之間的邊緣信息&#xff0c…