2013-05-18 1 views
2

Я хотел бы знать, если есть простой способ проверить некоторый неориентированный граф в NetworkX, является ли дерево или неПроверьте неориентированный граф является деревом в NetworkX

+1

Я не знаю, если есть элегантный способ сделать это с 'networkx', но простой глубины первого обхода, помечая узлы, которые вы посещали будет работать (если он находит уже посещенный узел, есть цикл, и поэтому он не является деревом). – Blckknght

ответ

8

Самый быстрый способ для графа G (V, E) может быть проверено, если | V | = | E | + 1 и связна:

import networkx as nx 
def is_tree(G): 
    if nx.number_of_nodes(G) != nx.number_of_edges(G) + 1: 
     return False 
    return nx.is_connected(G) 

if __name__ == '__main__': 

    print(is_tree(nx.path_graph(5))) 
    print(is_tree(nx.star_graph(5))) 
    print(is_tree(nx.house_graph()))