在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ Python圖遍歷算法
Python樹遍歷算法
Python雙端隊列
Python隊列
Python回溯
Python棧
Python數(shù)據(jù)結(jié)構(gòu)開發(fā)環(huán)境
Python數(shù)據(jù)結(jié)構(gòu)簡介
Python算法分析
Python圖遍歷算法
Python搜索算法
Python圖
Python鏈表
Python集合
Python元組
Python字典
Python矩陣
Python高級鏈表(雙向鏈表)
Python搜索樹
Python二維數(shù)組
Python堆
Python節(jié)點(diǎn)
Python排序算法
Python數(shù)據(jù)結(jié)構(gòu)
Python遞歸
Python列表
Python數(shù)組
Python算法設(shè)計
Python哈希表

Python圖遍歷算法

圖在解決許多重要的數(shù)學(xué)難題中是非常有用的數(shù)據(jù)結(jié)構(gòu)。 例如計算機(jī)網(wǎng)絡(luò)拓?fù)浠蚍治龌瘜W(xué)化合物的分子結(jié)構(gòu)。 它們還用于城市交通或路線規(guī)劃,甚至用于人類語言和語法。 所有這些應(yīng)用程序都有遍歷圖的共同挑戰(zhàn),并確保圖的所有節(jié)點(diǎn)都被訪問。 有兩種常見的已建立的方法來進(jìn)行這種遍歷,下面將對其進(jìn)行描述。

深度優(yōu)先遍歷:

也稱為深度優(yōu)先搜索(DFS),該算法使用堆棧記住在任何迭代中發(fā)生死角時開始搜索的下一個頂點(diǎn)。 使用設(shè)置的數(shù)據(jù)類型在python中實現(xiàn)DFS圖,因為它們提供了跟蹤訪問和未訪問節(jié)點(diǎn)所需的功能。

參考以下代碼的實現(xiàn) -

class graph:

    def __init__(self,gdict=None):
        if gdict is None:
            gdict = {}
        self.gdict = gdict
# Check for the visisted and unvisited nodes
def dfs(graph, start, visited = None):
    if visited is None:
        visited = set()
    visited.add(start)
    print(start)
    for next in graph[start] - visited:
        dfs(graph, next, visited)
    return visited

gdict = { "a" : set(["b","c"]),
                "b" : set(["a", "d"]),
                "c" : set(["a", "d"]),
                "d" : set(["e"]),
                "e" : set(["a"])
                }


dfs(gdict, 'a')

執(zhí)行上面示例代碼,得到以下結(jié)果 -

a
b
d
e
c

廣度優(yōu)先遍歷

也稱為廣度優(yōu)先搜索(BFS),該算法使用隊列記住當(dāng)任何迭代中發(fā)生死角時,獲取下一個頂點(diǎn)以開始搜索。

我們使用之前討論的隊列數(shù)據(jù)結(jié)構(gòu)在python中實現(xiàn)BFS。 當(dāng)繼續(xù)訪問相鄰的未訪問節(jié)點(diǎn)并繼續(xù)將其添加到隊列中。然后,開始只出現(xiàn)沒有未訪問節(jié)點(diǎn)的節(jié)點(diǎn)。 當(dāng)沒有下一個相鄰節(jié)點(diǎn)被訪問時,停止程序。

參考以下代碼的實現(xiàn) -

import collections
class graph:
    def __init__(self,gdict=None):
        if gdict is None:
            gdict = {}
        self.gdict = gdict

def bfs(graph, startnode):
# Track the visited and unvisited nodes using queue
        seen, queue = set([startnode]), collections.deque([startnode])
        while queue:
            vertex = queue.popleft()
            marked(vertex)
            for node in graph[vertex]:
                if node not in seen:
                    seen.add(node)
                    queue.append(node)

def marked(n):
    print(n)

# The graph dictionary
gdict = { "a" : set(["b","c"]),
                "b" : set(["a", "d"]),
                "c" : set(["a", "d"]),
                "d" : set(["e"]),
                "e" : set(["a"])
                }

bfs(gdict, "a")

執(zhí)行上面示例代碼,得到以下結(jié)果 -

a c b d e

上一篇:Python遞歸下一篇:Python圖