Python 圖算法
Python 圖算法
圖在解決許多重要的數(shù)學(xué)難題中是非常有用的數(shù)據(jù)結(jié)構(gòu)。例如計算機網(wǎng)絡(luò)拓?fù)浠蚍治龌瘜W(xué)化合物的分子結(jié)構(gòu)。它們還用于城市交通或路線規(guī)劃,甚至用于人類語言和語法。所有這些應(yīng)用程序都有使用它們的邊遍歷圖的共同挑戰(zhàn),并確保圖的所有節(jié)點都被訪問。有兩種常見的已建立的方法來進(jìn)行這種遍歷,下面將對其進(jìn)行描述。
深度優(yōu)先遍歷:
也稱為深度優(yōu)先搜索(DFS),該算法遍歷深度病房運動中的圖形,并使用堆棧記住在任何迭代中發(fā)生死角時開始搜索的下一個頂點。我們使用設(shè)置的數(shù)據(jù)類型在python中實現(xiàn)DFS圖表,因為它們提供了跟蹤訪問和未訪問節(jié)點所需的功能。
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')
當(dāng)上面的代碼被執(zhí)行時,它會產(chǎn)生以下結(jié)果 -
a b d e c
廣度第一次遍歷
也稱為寬度優(yōu)先搜索(BFS),該算法遍歷圖的寬度運動,并使用隊列記住在任何迭代中發(fā)生死角時開始搜索的下一個頂點。請訪問我們網(wǎng)站的鏈接,了解BFS圖表步驟的詳細(xì)信息。
我們使用之前討論的隊列數(shù)據(jù)結(jié)構(gòu)在python中實現(xiàn)BFS。當(dāng)我們繼續(xù)訪問相鄰的未訪問節(jié)點并繼續(xù)將其添加到隊列中時。然后,我們開始只出現(xiàn)沒有未訪問節(jié)點的節(jié)點。當(dāng)沒有下一個相鄰節(jié)點被訪問時,我們停止程序。
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")
當(dāng)上面的代碼被執(zhí)行時,它會產(chǎn)生以下結(jié)果 -
a c b d e
相關(guān)文章
- Python for 循環(huán)語句
- Python Deque
- Python 堆
- Python 算法分析
- Python3 面向?qū)ο?/a>
- Python3 命名空間
- Python pow() 函數(shù)
- Python seed() 函數(shù)
- Python uniform() 函數(shù)
- Python os.dup2() 方法
- Python os.fpathconf() 方法
- Python os.lstat() 方法
- Python os.major() 方法
- Python os.remove() 方法
- Python os.rename() 方法
- Python os.tcgetpgrp() 方法
- Python os.tmpnam() 方法
- Python lower()方法
- Python rfind()方法
- Python rjust()方法