Самое простое решение вашей проблемы можно сделать, используя recursion . Следующая функция find_max_rank_node
создана для получения узла, с которого мы собираемся начать поиск, и возвращает самый глубокий узел и глубину:
import pygraphviz as pgv
class Test:
def __init__(self):
self.G = pgv.AGraph(directed=True)
self.G.add_node('a')
self.G.add_node('b')
self.G.add_node('c')
self.G.add_node('d')
self.G.add_node('e')
self.G.add_node('f')
self.G.add_edge('a', 'b')
self.G.add_edge('b', 'c')
self.G.add_edge('b', 'd')
self.G.add_edge('d', 'e')
self.G.add_edge('e', 'f')
print(self.G.string())
# try it out
self.find_max_rank_node('a') # ('f', 4)
self.find_max_rank_node('b') # ('f', 3)
self.find_max_rank_node('c') # ('c', 0)
self.find_max_rank_node('d') # ('f', 2)
self.find_max_rank_node('e') # ('f', 1)
self.find_max_rank_node('f') # ('f', 0)
# visualize the graph
self.viz()
def find_max_rank_node(self, start_node):
succ = self.G.successors(start_node)
if len(succ) == 0:
return (start_node, 0)
else:
deepest_node = None
depth = 0
for node in succ:
n, d = self.find_max_rank_node(node)
if d >= depth:
deepest_node = n
depth = d
return (deepest_node, 1+depth)
def viz(self):
self.G.layout()
self.G.draw('file.png')
if __name__ == '__main__': Test()
Кроме того, я создал еще один метод, который называется * 1007. * чтобы визуализировать график и написать его на изображении file.png
, показанном ниже:
Надеюсь, что это ответ на ваш вопрос !!