深度優先搜尋

2021-08-25 02:38:53 字數 1028 閱讀 3750

深度優先搜尋:在乙個圖中,從某乙個節點開始訪問該圖(作為頂點),然後標記該節點為已訪問。接著去訪問它的鄰接未訪問的節點,這個過程一直持續,直到遇到乙個終點——該節點的所有鄰接節點都是已訪問。此時,回退到上乙個節點,並嘗試從這裡訪問未訪問的節點。直到回退到起始點,並且起始點鄰接的節點都是已訪問。這個時候該演算法結束,這個時候該節點所在的連通子圖所有的節點都被訪問過了。如果還有其他未訪問的節點存在,那麼該演算法必須從其中某乙個節點開始,重複上面的過程。直到該圖中所有的節點都被訪問過了,此時,搜尋結束。

深度優先搜尋(dfs)的重要應用通常在於檢查圖的連通性和無環性,當然也能求出乙個非連通圖的連通分量。

dfs這種策略是能往前多走幾步是幾步,總是試圖走的更遠更深。

標記這項工作需要額外的空間來做,否則原來的圖就會被破壞。一般是用乙個陣列來做的。下面給出深度優先搜尋的c++實現**。(深度優先搜尋鄰接矩陣

// 深度優先搜尋(dfs).cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。

//#include "pch.h"

#include #include using namespace std;

class mygraph

;mygraph::mygraph()

for (int i = 0; i < this->v; i++)

int m, n;

for (int i = 0; i < this->e; i++) }

mygraph::~mygraph()

void mygraph::dfs(int start) }}

int mygraph::print(int i, int j) //這個介面函式和深度優先搜尋無關

int main()

對於深度優先搜尋的分析依賴於具體的實現,如果圖是鄰接矩陣儲存的,那麼時間複雜度是o(v²);如果圖是鄰接表儲存的,那麼時間複雜度是o(v+e)。

廣度優先搜尋 深度優先搜尋

前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...

廣度優先搜尋,深度優先搜尋

深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...

深度優先搜尋 廣度優先搜尋

深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 package com.neusoft.data.structure 深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 public class dfsbfs 初始化 邊 mmatrix new int vlen vlen for...