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

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

Python圖遍歷算法

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

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

也稱為深度優(yōu)先搜索(DFS),該算法使用堆棧記住在任何迭代中發(fā)生死角時(shí)開(kāi)始搜索的下一個(gè)頂點(diǎn)。 使用設(shè)置的數(shù)據(jù)類(lèi)型在python中實(shí)現(xiàn)DFS圖,因?yàn)樗鼈兲峁┝烁櫾L問(wèn)和未訪問(wèn)節(jié)點(diǎn)所需的功能。

參考以下代碼的實(shí)現(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),該算法使用隊(duì)列記住當(dāng)任何迭代中發(fā)生死角時(shí),獲取下一個(gè)頂點(diǎn)以開(kāi)始搜索。

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

參考以下代碼的實(shí)現(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圖