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

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

這篇具有很好參考價(jià)值的文章主要介紹了【Python搜索算法】深度優(yōu)先搜索(DFS)算法原理詳解與應(yīng)用,示例+代碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

1 基本原理

2 DFS算法流程

3 時(shí)間復(fù)雜度

4 空間復(fù)雜度

5 DFS算法應(yīng)用案例:

5.1 解決路徑查找問(wèn)題?

5.2 解決圖的連通性問(wèn)題

5.3? 拓?fù)渑判?/p>

5.4? 在樹(shù)結(jié)構(gòu)中進(jìn)行深度遍歷


深度優(yōu)先搜索(DFS)是一種重要的圖遍歷算法,用于探索圖中的節(jié)點(diǎn)和邊。

1 基本原理

  • DFS 是一種遞歸或棧(堆棧)數(shù)據(jù)結(jié)構(gòu)的算法,用于圖的遍歷。
  • 從一個(gè)起始節(jié)點(diǎn)開(kāi)始,盡可能深入圖的分支,直到無(wú)法繼續(xù)深入,然后回溯并探索其他分支。
  • 通過(guò)標(biāo)記已訪問(wèn)的節(jié)點(diǎn)來(lái)避免重復(fù)訪問(wèn)。

2 DFS算法流程

  1. 創(chuàng)建一個(gè)空的棧(Stack)數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)待訪問(wèn)的節(jié)點(diǎn)。

  2. 從起始節(jié)點(diǎn)開(kāi)始,將其標(biāo)記為已訪問(wèn)并入棧。

  3. 重復(fù)以下步驟,直到棧為空: a. 出棧一個(gè)節(jié)點(diǎn),并標(biāo)記為已訪問(wèn)。 b. 檢查該節(jié)點(diǎn)的所有未被訪問(wèn)的鄰居節(jié)點(diǎn)。 c. 對(duì)于每個(gè)未訪問(wèn)的鄰居節(jié)點(diǎn),將其標(biāo)記為已訪問(wèn)并入棧。

  4. 如果無(wú)法再繼續(xù),即沒(méi)有未訪問(wèn)的鄰居節(jié)點(diǎn),返回上一個(gè)節(jié)點(diǎn)并繼續(xù)。

  5. 重復(fù)步驟2-4,直到遍歷整個(gè)圖。

3 時(shí)間復(fù)雜度

  • 在最壞情況下,DFS的時(shí)間復(fù)雜度可以是O(V + E),其中V是節(jié)點(diǎn)數(shù),E是邊數(shù)。
  • 由于DFS可能訪問(wèn)整個(gè)圖,因此在稠密圖中可能效率較低。

4 空間復(fù)雜度

  • 空間復(fù)雜度取決于遞歸深度或堆棧的大小,通常為O(V)?

5 DFS算法應(yīng)用案例:

5.1 解決路徑查找問(wèn)題?

????????一個(gè)常見(jiàn)的應(yīng)用案例是查找從起始節(jié)點(diǎn)到目標(biāo)節(jié)點(diǎn)的路徑。例如,在以下示例圖中,我們要查找從節(jié)點(diǎn)A到節(jié)點(diǎn)G的路徑。

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

下面是一個(gè)簡(jiǎn)單的Python代碼示例,用于執(zhí)行DFS算法,找到從節(jié)點(diǎn)A到節(jié)點(diǎn)G的路徑。

# 定義示例圖
GRAPH = {
    'A': ['B', 'C'],
    'B': ['D', 'E'],
    'C': ['F'],
    'D': [],
    'E': ['F'],
    'F': ['G'],
    'G': []
}

# 定義DFS算法,查找從起始節(jié)點(diǎn)到目標(biāo)節(jié)點(diǎn)的路徑
def dfs(graph, start, end, path=[]):
    # 將當(dāng)前節(jié)點(diǎn)添加到路徑中
    path = path + [start]

    # 如果當(dāng)前節(jié)點(diǎn)等于目標(biāo)節(jié)點(diǎn),返回找到的路徑
    if start == end:
        return path

    # 如果當(dāng)前節(jié)點(diǎn)不在圖中,返回None
    if start not in graph:
        return None

    # 遍歷當(dāng)前節(jié)點(diǎn)的鄰居節(jié)點(diǎn)
    for node in graph[start]:
        # 如果鄰居節(jié)點(diǎn)不在已訪問(wèn)的路徑中,繼續(xù)DFS
        if node not in path:
            new_path = dfs(graph, node, end, path)
            # 如果找到路徑,返回該路徑
            if new_path:
                return new_path

    # 如果無(wú)法找到路徑,返回None
    return None

# 調(diào)用DFS算法查找從A到G的路徑
path = dfs(GRAPH, 'A', 'G')
if path:
    print("Path from A to G:", path)
else:
    print("No path found.")

輸出:

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

5.2 解決圖的連通性問(wèn)題:查找下圖中的連通組件

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

import networkx as nx
import matplotlib.pyplot as plt

# 定義一個(gè)有向圖的鄰接列表表示
graph = {
    'A': ['B', 'C'],
    'B': ['A'],
    'C': ['A'],
    'D': ['E'],
    'E': ['D'],
    'F': [],
}

def find_connected_components(graph):
    def dfs(node, component):
        visited.add(node)
        component.append(node)
        for neighbor in graph.get(node, []):
            if neighbor not in visited:
                dfs(neighbor, component)

    visited = set()
    connected_components = []

    for node in graph:
        if node not in visited:
            component = []
            dfs(node, component)
            connected_components.append(component)

    return connected_components

# 查找連通組件
components = find_connected_components(graph)

# 打印連通組件
for i, component in enumerate(components, start=1):
    print(f"Connected Component {i}: {component}")

# 創(chuàng)建有向圖
G = nx.DiGraph(graph)

# 繪制圖形
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=500, node_color='lightblue', font_size=10, font_color='black', font_weight='bold')

# 添加邊的標(biāo)簽
labels = {}
for node in G.nodes():
    labels[node] = node
edge_labels = {(u, v): v for u, v in G.edges()}
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=8)

plt.show()

輸出:

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

? ????????示例創(chuàng)建 find_connected_components 函數(shù),用于查找圖中的連通組件。它使用深度優(yōu)先搜索(DFS)來(lái)遍歷圖,找到連通組件,并將它們添加到 connected_components 列表中。解析如下:

  1. find_connected_components(graph) 函數(shù)接受一個(gè)有向圖的鄰接列表表示為輸入,并返回圖中的連通組件。

  2. 內(nèi)部嵌套的 dfs(node, component) 函數(shù)是深度優(yōu)先搜索函數(shù)。它采用兩個(gè)參數(shù):

    • node 表示當(dāng)前遍歷的節(jié)點(diǎn)。
    • component 是一個(gè)列表,用于存儲(chǔ)當(dāng)前連通組件中的節(jié)點(diǎn)。

    dfs 函數(shù)的目標(biāo)是遍歷與 node 相關(guān)聯(lián)的節(jié)點(diǎn),并將它們添加到 component 中。

  3. visited 是一個(gè)集合,用于跟蹤已訪問(wèn)的節(jié)點(diǎn)。一開(kāi)始,它是空的。

  4. connected_components 是一個(gè)列表,用于存儲(chǔ)找到的連通組件。開(kāi)始時(shí),它也是空的。

  5. 外部的 for 循環(huán)遍歷圖中的每個(gè)節(jié)點(diǎn),以確保所有節(jié)點(diǎn)都被覆蓋。對(duì)于每個(gè)節(jié)點(diǎn),它執(zhí)行以下操作:

    • 如果該節(jié)點(diǎn)尚未在 visited 中,表示它是一個(gè)新的連通組件的起始節(jié)點(diǎn)。
    • 創(chuàng)建一個(gè)新的空列表 component,用于存儲(chǔ)該連通組件的節(jié)點(diǎn)。
    • 調(diào)用 dfs(node, component) 函數(shù),開(kāi)始深度優(yōu)先搜索,并將所有與該節(jié)點(diǎn)相連的節(jié)點(diǎn)添加到 component 中。
    • component 添加到 connected_components 中,表示已找到一個(gè)連通組件。
  6. 最后,函數(shù)返回 connected_components 列表,其中包含了所有找到的連通組件。

5.3? 拓?fù)渑判?/h3>

????????拓?fù)渑判蚴怯糜诖_定有向圖中節(jié)點(diǎn)的線性順序,使得圖中的每一條有向邊都是從前面的節(jié)點(diǎn)指向后面的節(jié)點(diǎn)。在拓?fù)渑判蛑校瑳](méi)有環(huán)路存在。

應(yīng)用示例

????????假設(shè)有一個(gè)有向圖如下,表示課程之間的依賴(lài)關(guān)系,您需要找到一個(gè)可以完成所有課程的順序。如果存在環(huán)路,表示存在無(wú)法解決的依賴(lài)關(guān)系,您需要找到一個(gè)沒(méi)有環(huán)路的順序。

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

import networkx as nx
import matplotlib.pyplot as plt

def topological_sort(graph):
    def dfs(node):
        visited.add(node)
        for neighbor in graph.get(node, []):
            if neighbor not in visited:
                dfs(neighbor)
        result.append(node)

    visited = set()
    result = []

    for node in graph:
        if node not in visited:
            dfs(node)

    return result[::-1]

# 定義有向圖的依賴(lài)關(guān)系
courses = {
    'CSC300': ['CSC100', 'CSC200'],
    'CSC200': ['CSC100'],
    'CSC100': [],
    'CSC400': ['CSC300', 'CSC200'],
}

# 創(chuàng)建一個(gè)有向圖
G = nx.DiGraph(courses)

# 調(diào)用拓?fù)渑判蛩惴?topological_order = topological_sort(courses)

if topological_order:
    print("Topological Order of Courses:", topological_order)
else:
    print("No valid topological order (contains a cycle).")

# 繪制有向圖
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=500, node_color='lightblue', font_size=10, font_color='black', font_weight='bold')

# 添加邊的標(biāo)簽
labels = {}
for node in G.nodes():
    labels[node] = node
edge_labels = {(u, v): v for u, v in G.edges()}
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=8)

plt.show()

輸出為:

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

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

????????示例定義了topological_sort函數(shù),用于執(zhí)行拓?fù)渑判?。這個(gè)函數(shù)使用深度優(yōu)先搜索(DFS)來(lái)查找圖的拓?fù)渑判?。如果圖中存在環(huán)路,該函數(shù)仍然會(huì)返回一個(gè)排序結(jié)果,但它不保證是一個(gè)有效的拓?fù)渑判颉?/p>

5.4? 在樹(shù)結(jié)構(gòu)中進(jìn)行深度遍歷

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

import networkx as nx
import matplotlib.pyplot as plt

class TreeNode:
    def __init__(self, value):
        self.value = value
        self.children = []

    def add_child(self, child_node):
        self.children.append(child_node)

def depth_first_search(node, graph, parent=None):
    if node is None:
        return

    graph.add_node(node.value)  # 添加節(jié)點(diǎn)到圖中

    if parent is not None:
        graph.add_edge(parent.value, node.value)  # 添加邊連接父節(jié)點(diǎn)和當(dāng)前節(jié)點(diǎn)

    print(node.value)  # 在DFS時(shí)輸出節(jié)點(diǎn)值

    for child in node.children:
        depth_first_search(child, graph, node)  # 遞歸遍歷子節(jié)點(diǎn)

# 創(chuàng)建一個(gè)較復(fù)雜的樹(shù)結(jié)構(gòu)
root = TreeNode("A")
b = TreeNode("B")
c = TreeNode("C")
d = TreeNode("D")
e = TreeNode("E")
f = TreeNode("F")
g = TreeNode("G")
h = TreeNode("H")
i = TreeNode("I")

root.add_child(b)
root.add_child(c)
b.add_child(d)
b.add_child(e)
c.add_child(f)
c.add_child(g)
g.add_child(h)
h.add_child(i)

# 創(chuàng)建一個(gè)有向圖
G = nx.DiGraph()

# 執(zhí)行深度優(yōu)先搜索并創(chuàng)建圖
depth_first_search(root, G)

# 繪制樹(shù)結(jié)構(gòu)圖
pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, node_size=500, node_color='lightblue', font_size=10, font_color='black', font_weight='bold')

# 添加邊的標(biāo)簽
labels = {}
for node in G.nodes():
    labels[node] = node
edge_labels = {(u, v): v for u, v in G.edges()}
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=8)

plt.show()

?????????這段代碼用于創(chuàng)建一個(gè)樹(shù)結(jié)構(gòu),然后執(zhí)行深度優(yōu)先搜索(DFS),最后繪制樹(shù)結(jié)構(gòu)圖并添加標(biāo)簽。以下是對(duì)代碼的詳細(xì)解析:

  1. 首先,定義了一個(gè)樹(shù)結(jié)構(gòu)的節(jié)點(diǎn)類(lèi) TreeNode,其中每個(gè)節(jié)點(diǎn)具有一個(gè)值和子節(jié)點(diǎn)列表。

  2. depth_first_search 函數(shù)中,執(zhí)行深度優(yōu)先搜索。它接受三個(gè)參數(shù):

    • node:當(dāng)前要處理的節(jié)點(diǎn)。
    • graph:用于構(gòu)建樹(shù)結(jié)構(gòu)圖的 NetworkX 有向圖對(duì)象。
    • parent:父節(jié)點(diǎn),用于添加邊。

    在函數(shù)中,執(zhí)行以下操作:

    • 添加當(dāng)前節(jié)點(diǎn)到圖中(graph.add_node(node.value))。
    • 如果存在父節(jié)點(diǎn),添加從父節(jié)點(diǎn)到當(dāng)前節(jié)點(diǎn)的邊(graph.add_edge(parent.value, node.value))。
    • 打印當(dāng)前節(jié)點(diǎn)的值,以在DFS期間輸出節(jié)點(diǎn)值。
    • 遞歸遍歷當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn),使用當(dāng)前節(jié)點(diǎn)作為父節(jié)點(diǎn)。
  3. 創(chuàng)建一個(gè)較復(fù)雜的樹(shù)結(jié)構(gòu):

    • 根節(jié)點(diǎn)為 "A",有兩個(gè)子節(jié)點(diǎn) "B" 和 "C"。
    • 節(jié)點(diǎn) "B" 有兩個(gè)子節(jié)點(diǎn) "D" 和 "E"。
    • 節(jié)點(diǎn) "C" 有兩個(gè)子節(jié)點(diǎn) "F" 和 "G"。
    • 節(jié)點(diǎn) "G" 有一個(gè)子節(jié)點(diǎn) "H"。
    • 節(jié)點(diǎn) "H" 有一個(gè)子節(jié)點(diǎn) "I"。
  4. 創(chuàng)建一個(gè) NetworkX 有向圖對(duì)象 G,用于存儲(chǔ)樹(shù)結(jié)構(gòu)圖。

  5. 執(zhí)行深度優(yōu)先搜索,從根節(jié)點(diǎn) "A" 開(kāi)始。深度優(yōu)先搜索會(huì)遞歸遍歷樹(shù)的每個(gè)分支,并在DFS期間輸出節(jié)點(diǎn)值。

  6. 使用 NetworkX 繪制樹(shù)結(jié)構(gòu)圖:

    • nx.spring_layout 用于確定節(jié)點(diǎn)的位置。
    • nx.draw 用于繪制節(jié)點(diǎn)和邊,設(shè)置節(jié)點(diǎn)的大小、顏色和標(biāo)簽。
    • nx.draw_networkx_edge_labels 用于添加邊的標(biāo)簽。
  7. 最后,通過(guò) plt.show() 顯示繪制的樹(shù)結(jié)構(gòu)圖。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-734863.html

到了這里,關(guān)于【Python搜索算法】深度優(yōu)先搜索(DFS)算法原理詳解與應(yīng)用,示例+代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Python算法:深度優(yōu)先搜索—DFS(模板及其樣例)

    Python算法:深度優(yōu)先搜索—DFS(模板及其樣例)

    ? 沿著一條路徑一直搜索下去,在無(wú)法搜索時(shí),回退到剛剛訪問(wèn)過(guò)的節(jié)點(diǎn)。 ? 并且每個(gè)節(jié)點(diǎn)只能訪問(wèn)一次。 ? 本質(zhì)上是持續(xù)搜索,遍歷了所有可能的情況,必然能得到解。 ? 流程是一個(gè)樹(shù)的形式,每次一條路走到黑。 ? 目的主要是達(dá)到被搜索結(jié)構(gòu)的葉結(jié)點(diǎn)直到最后一層

    2024年03月24日
    瀏覽(18)
  • 算法第六期——DFS初入門(mén)(深度優(yōu)先搜索)(Python)

    算法第六期——DFS初入門(mén)(深度優(yōu)先搜索)(Python)

    目錄 ? 一、蠻力的技術(shù):搜索 1.1、【暴力法】 1.2、蠻力的基本方法——掃描 二、搜索的基本方法 2.1、BFS:一群老鼠走迷宮 2.2、DFS:一只老鼠走迷宮? 2.3、BFS和DFS的異同? 三、DFS詳解 3.1、DFS訪問(wèn)示例 3.2、?DFS基礎(chǔ): 遞歸和記憶化搜索 3.2.1 遞歸——斐波那契數(shù)列 3.2.2改進(jìn)遞歸

    2024年04月13日
    瀏覽(26)
  • 【Python搜索算法】廣度優(yōu)先搜索(BFS)算法原理詳解與應(yīng)用,示例+代碼

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

    目錄 1 廣度優(yōu)先搜索???? 2 應(yīng)用示例 2.1 迷宮路徑搜索 2.2 社交網(wǎng)絡(luò)中的關(guān)系度排序 2.3 查找連通區(qū)域 ????????廣度優(yōu)先搜索(Breadth-First Search,BFS)是一種圖遍歷算法,用于系統(tǒng)地遍歷或搜索圖(或樹(shù))中的所有節(jié)點(diǎn)。BFS的核心思想是從起始節(jié)點(diǎn)開(kāi)始,首先訪問(wèn)其所有相

    2024年02月08日
    瀏覽(23)
  • C++深度優(yōu)先搜索(DFS)算法的應(yīng)用:樹(shù)中可以形成回文的路徑數(shù)

    C++深度優(yōu)先搜索(DFS)算法的應(yīng)用:樹(shù)中可以形成回文的路徑數(shù)

    深度優(yōu)先搜索(DFS) 狀態(tài)壓縮 給你一棵 樹(shù)(即,一個(gè)連通、無(wú)向且無(wú)環(huán)的圖),根 節(jié)點(diǎn)為 0 ,由編號(hào)從 0 到 n - 1 的 n 個(gè)節(jié)點(diǎn)組成。這棵樹(shù)用一個(gè)長(zhǎng)度為 n 、下標(biāo)從 0 開(kāi)始的數(shù)組 parent 表示,其中 parent[i] 為節(jié)點(diǎn) i 的父節(jié)點(diǎn),由于節(jié)點(diǎn) 0 為根節(jié)點(diǎn),所以 parent[0] == -1 。 另給你一

    2024年02月04日
    瀏覽(22)
  • C語(yǔ)言遞歸+DFS(深度優(yōu)先搜索算法)詳解 圖文并茂,手把手教你畫(huà)樹(shù)狀圖

    C語(yǔ)言遞歸+DFS(深度優(yōu)先搜索算法)詳解 圖文并茂,手把手教你畫(huà)樹(shù)狀圖

    目錄 一.標(biāo)準(zhǔn)定義 二.跳臺(tái)階(典型遞歸題目) 三.遞歸實(shí)現(xiàn)指數(shù)型枚舉 四.遞歸實(shí)現(xiàn)排列型枚舉 五.遞歸實(shí)現(xiàn)組合型枚舉 六.DFS算法模板 深度優(yōu)先搜索算法(Depth First Search,簡(jiǎn)稱(chēng)DFS): 一種用于遍歷或搜索樹(shù)或圖的算法 。 沿著樹(shù)的深度遍歷樹(shù)的節(jié)點(diǎn), 盡可能深的搜索樹(shù)的分

    2024年02月04日
    瀏覽(94)
  • 【數(shù)據(jù)結(jié)構(gòu)與算法】圖遍歷算法 ( 深度優(yōu)先搜索 DFS | 深度優(yōu)先搜索和廣度優(yōu)先搜索 | 深度優(yōu)先搜索基本思想 | 深度優(yōu)先搜索算法步驟 | 深度優(yōu)先搜索理論示例 )

    【數(shù)據(jù)結(jié)構(gòu)與算法】圖遍歷算法 ( 深度優(yōu)先搜索 DFS | 深度優(yōu)先搜索和廣度優(yōu)先搜索 | 深度優(yōu)先搜索基本思想 | 深度優(yōu)先搜索算法步驟 | 深度優(yōu)先搜索理論示例 )

    圖 的 遍歷 就是 對(duì) 圖 中的 結(jié)點(diǎn) 進(jìn)行遍歷 , 遍歷 結(jié)點(diǎn) 有如下兩種策略 : 深度優(yōu)先搜索 DFS 廣度優(yōu)先搜索 BFS \\\" 深度優(yōu)先搜索 \\\" 英文名稱(chēng)是 Depth First Search , 簡(jiǎn)稱(chēng) DFS ; DFS 基本思想 : 訪問(wèn)第一個(gè)鄰接結(jié)點(diǎn) : 從 起始點(diǎn) 出發(fā) , 該 起始點(diǎn) 可能有 若干 鄰接結(jié)點(diǎn) , 訪問(wèn) 第一個(gè) 鄰接結(jié)點(diǎn)

    2024年02月02日
    瀏覽(21)
  • 深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS),用代碼講原理

    深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS),用代碼講原理

    以圖文的形式對(duì)深度搜索和廣度搜索的理論進(jìn)行講解時(shí),可能會(huì)對(duì)一些概念有些模糊,且不太清楚怎么把該理論用程序的方式進(jìn)行復(fù)現(xiàn)并解決這一搜索問(wèn)題(這說(shuō)的就是本人) 。所以后面我看完了一份實(shí)現(xiàn)這兩種搜索方法的代碼,在這做一個(gè)筆記,希望對(duì)大家有所幫助。 兩

    2024年04月12日
    瀏覽(20)
  • 深度優(yōu)先搜索(DFS)算法

    目錄 算法思想 時(shí)間復(fù)雜度和空間復(fù)雜度 算法實(shí)現(xiàn) 算法優(yōu)缺點(diǎn) 應(yīng)用領(lǐng)域 深度優(yōu)先搜索(DFS)算法的思想是從圖的某個(gè)起始頂點(diǎn)開(kāi)始,沿著一條路徑盡可能深入地訪問(wèn)圖中的所有頂點(diǎn),直到不能繼續(xù)為止,然后返回并探索其他路徑。具體而言,DFS算法使用棧數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn),

    2024年02月05日
    瀏覽(34)
  • 深度優(yōu)先搜索(DFS)(算法筆記)

    深度優(yōu)先搜索(DFS)(算法筆記)

    本文內(nèi)容基于《算法筆記》和官方配套練題網(wǎng)站“晴問(wèn)算法”,是我作為小白的學(xué)習(xí)記錄,如有錯(cuò)誤還請(qǐng)?bào)w諒,可以留下您的寶貴意見(jiàn),不勝感激。 深度優(yōu)先搜索是一種枚舉所有完整路徑以遍歷所有情況的搜索方法,總是以“深度”作為前進(jìn)的。實(shí)現(xiàn)方式是有很多,最

    2024年02月08日
    瀏覽(21)
  • [算法日志]圖論: 深度優(yōu)先搜索(DFS)

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

    2024年02月03日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包