這是我為 Graph 結構撰寫的代碼,它適用于以數字形式傳遞的值
class Graph:
def __init__(self, nVertices):
self.nVertices = nVertices
self.adjList = [[]for i in range(nVertices)]
def addEdge(self, v1, v2):
self.adjList[v1].append(v2)
self.adjList[v2].append(v1)
def dfs(self, sv, visited):
print(sv)
visited[sv] = True
for i in self.adjList[sv]:
if visited[i] is False:
self.dfs(i, visited)
def removeEdge(self, v1, v2):
if self.containsEdge(v1, v2) is False:
return
self.adjList[v1].remove(v2)
self.adjList[v2].remove(v1)
def containsEdge(self, v1, v2):
return True if v2 in self.adjList[v1] else False
def __str__(self):
return str(self.adjList)
主程式,使用 Graph Class,我們可以使用它創建帶有節點和邊的圖形
g = Graph(6)
g.addEdge(0, 2)
g.addEdge(0, 4)
g.addEdge(1, 2)
g.dfs(0, [False for i in range(g.nVertices)])
print(g)
現在我想要什么,當我傳遞字串值時
g = Graph(6)
g.addEdge('A', 'B')
g.addEdge('B', 'E')
g.addEdge('E', 'F')
g.dfs(0, [False for i in range(g.nVertices)])
print(g)
它應該可以作業,但不是,因為我的邊緣函式是這樣寫的,我不知道如何實作它。我相信一些關鍵價值的東西會很有用,但不確定如何讓它發揮作用。
請幫我弄清楚:)
uj5u.com熱心網友回復:
您可以將adjList屬性定義為串列字典:
self.adjList = defaultdict(list)
結構也visited需要改變。我會建議一個集合而不是一個布爾串列,它應該從一個空集合開始。
驅動程式代碼肯定需要更改。傳遞 0 作為第一個引數dfs是沒有意義的,因為不再有由 0 標識的節點。
最后,nVertices現在不是很有用,因為無論如何您確實需要提供所有頂點的標簽。我會放棄它。
無關,但containsEdge不需要if..else操作員。只需回傳已經是布林值的運算式的值。
這是改編后的代碼:
from collections import defaultdict
class Graph:
def __init__(self):
self.adjList = defaultdict(list) # Not list of lists, but dict of lists
def addEdge(self, v1, v2):
self.adjList[v1].append(v2)
self.adjList[v2].append(v1)
def dfs(self, sv, visited):
print(sv)
visited.add(sv) # No list of booleans, but set
for i in self.adjList[sv]:
if i not in visited: # Set membership test
self.dfs(i, visited)
def removeEdge(self, v1, v2):
if self.containsEdge(v1, v2) is False:
return
self.adjList[v1].remove(v2)
self.adjList[v2].remove(v1)
def containsEdge(self, v1, v2):
return v2 in self.adjList[v1] # Simplified expression
def __str__(self):
return dict.__repr__(self.adjList) # Use standard dict representation
g = Graph()
g.addEdge('A', 'B')
g.addEdge('B', 'E')
g.addEdge('E', 'F')
g.dfs('A', set()) # Adapt arguments to new data structure
print(g)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/529170.html
上一篇:列印*對應的迭代次數
下一篇:為序列寫一個演算法
