開始學習python正在看資料結構關於圖的部分這個是在實作一個圖的深度優先遍歷和廣度優先遍歷,但是在最後,也就是g.add_nodes([i 1 for i in range(10)] )會顯示TypeError: add_nodes() missing 1 required positional argument: 'nodelist' 就完全不知道該怎麼去解決,有沒有大神可以指點一下。
這個是我的程式
class Graph(object):
def __init__(self, *args, **kwargs):
self.node_neighbors = {}
self.visited = {}
def add_nodes(self,nodelist):
for node in nodelist:
self.add_node(node)
def add_node(self,node):
if node not in self.add_nodes():
self.node_neighbors[node] = []
def add_edge(self,edge):
u, v = edge
if(v not in self.node_neighbors[u]) and (u not in self.node_neighbors[v]):
self.node_neighbors[u].append(u)
if(u!=v):
self.node_neighbors[v].append(u)
def nodes(self):
return self.node_neighbors.keys()
def depth_first_search(self, root=None):
order = []
def dfs(node):
self.visited[node] = True
order.append(node)
for n in self.node_neighbors[node]:
if not n in self.visited:
dfs(n)
if root:
dfs(root)
for node in self.nodes():
if not node in self.visited:
dfs(node)
print(order)
return order
def breadtg_frist_search(self, root = None):
queue = []
order = []
def bfs():
while len(queue) > 0:
node = queue.pop()
self.visited[node] = True
for n in self.node_neighbors[node]:
if (not n in self.visited) and (not n in queue):
queue.append(n)
order.append(n)
if root:
queue.append(root)
order.append(root)
bfs()
for node in self.nodes():
if not node in self.visited:
queue.append(node)
order.append(node)
bfs()
print(order)
return order
if name == '__main__':
g = Graph()
g.add_nodes([i 1 for i in range(10)])
g.add_edge((1, 2))
g.add_edge((1, 3))
g. add_edge((2, 4))
g.add_edge((2, 5))
g.add_edge((4, 8))
g.add_edge((5, 8))
g.add_edge((5, 9))
g.add_edge((3, 6))
g.add_edge((3, 7))
g.add_edge((7, 10))
g.add_edge((9, 10))
print('nodes:' g.nodes())
order = g.breadtg_frist_search(1)
order = g.depth_first_search(1)
学习ing2017-06-14 10:53:00
def add_node(self,node):
if node not in self.add_nodes():
self.node_neighbors[node] = []
if node not in self.add_nodes():
中的add_nodes()
需要參數,具體要什麼看你自己了.