Python 作為一種先進(jìn)的編程語(yǔ)言,有很強(qiáng)的處理圖形數(shù)據(jù)結(jié)構(gòu)的能力。其中,無(wú)向圖是一種簡(jiǎn)單且常用的圖形數(shù)據(jù)結(jié)構(gòu)。在 Python 中,我們可以使用不同的方式來(lái)表示無(wú)向圖,比如鄰接表、鄰接矩陣等。
# 以鄰接表形式表示無(wú)向圖 class UndirectedGraph: def __init__(self, edges): self.adj_list = {} for edge in edges: a, b = edge if a not in self.adj_list: self.adj_list[a] = [] if b not in self.adj_list: self.adj_list[b] = [] self.adj_list[a].append(b) self.adj_list[b].append(a)
在上述代碼中,我們使用字典(dictionary)adj_list 來(lái)存儲(chǔ)無(wú)向圖的鄰接表表示,其中字典的鍵表示各個(gè)節(jié)點(diǎn),對(duì)應(yīng)的值是一個(gè)列表,表示該節(jié)點(diǎn)連接的其他節(jié)點(diǎn)。
# 以鄰接矩陣形式表示無(wú)向圖 class UndirectedGraph: def __init__(self, edges, n): self.adj_matrix = [[0] * n for _ in range(n)] for a, b in edges: self.adj_matrix[a][b] = 1 self.adj_matrix[b][a] = 1
在代碼中,我們使用二維列表(list)adj_matrix 來(lái)存儲(chǔ)無(wú)向圖的鄰接矩陣表示,其中列表的下標(biāo)代表節(jié)點(diǎn),對(duì)應(yīng)的元素表示該節(jié)點(diǎn)與其他節(jié)點(diǎn)是否相連。當(dāng)對(duì)應(yīng)元素為 1 時(shí)表示相連,反之則不相連。
以上兩種方法都可以有效地表示無(wú)向圖,不同的方法適用于不同的場(chǎng)合。例如,當(dāng)我們需要快速檢查兩個(gè)節(jié)點(diǎn)是否有連邊時(shí),使用鄰接矩陣是更為方便的,而鄰接表適用于節(jié)點(diǎn)很多但是連邊比較少的情況。