Использование dfs_tree
может определенно помочь:
import zss
import networkx as nx
G=nx.DiGraph()
G.add_edges_from([('f', 'a'), ('a', 'h'), ('a', 'c'), ('c', 'l'), ('f', 'e')])
T = nx.dfs_tree(G, source='f')
nodes_dict = {}
for edge in T.edges():
if edge[0] not in nodes_dict:
nodes_dict[edge[0]] = zss.Node(edge[0])
if edge[1] not in nodes_dict:
nodes_dict[edge[1]] = zss.Node(edge[1])
nodes_dict[edge[0]].addkid(nodes_dict[edge[1]])
print(zss.simple_distance(nodes_dict['f'], nodes_dict['f'])) # 0.0
В случае, если мы не знаем, какой узел является корневым узлом G, но знаем, что у нас есть правильное дерево, мы можем получить узел источника, вызвав :
source = [n for (n, d) in G.in_degree() if d == 0][0]
T = nx.dfs_tree(G, source=source)
Поскольку корень является единственным узлом без входящих узлов, это должно работать.
Мне действительно понравился Ascend.NET. Хорошо зарегистрированная, превосходная поддержка разработчика, исходный код включен.
Моно WinForms отстает от Microsoft, но включает многие знакомые средства управления. Если Вы готовы попробовать что-то другое, Моно имеет другой Gui ToolKits.
У одного из лучших поставщиков компонентов на рынке, Developer Express , есть несколько отличных. Это должно вас начать; хотя любые дополнительные компоненты, которые вы получаете по платной подписке, безусловно, того стоят.