#coding: utf-8
import networkx as nx

def habitacions(nomsHabitacions, connexions):
    GrafHabitacions=nx.Graph()
    GrafHabitacions.add_nodes_from(nomsHabitacions)
    GrafHabitacions.add_edges_from(connexions)
    return GrafHabitacions

def hab_veina(GrafHabitacions,habitacio):
    veines=GrafHabitacions.neighbors(habitacio)
    return sorted(veines)

def hi_puc_anar(GrafHabitacions,habitacio1, habitacio2):
    try:
        longCami = nx.shortest_path_length(GrafHabitacions, 
                                           habitacio1, habitacio2)
        hipotAnar=True
    except nx.NetworkXNoPath:
        longCami=0
        hipotAnar=False
    return (hipotAnar, longCami)

def subcastells(GrafHabitacions):
    return nx.number_connected_components(GrafHabitacions)

def per_on_passem_1(GrafHabitacions, habitacio):
    lnodes = list(nx.node_connected_component(GrafHabitacions, habitacio))
    return nx.Graph.subgraph(GrafHabitacions, lnodes)

def per_on_passem_2(GrafHabitacions, habitacio):
    return nx.dfs_tree(GrafHabitacions, habitacio)

def per_on_passem_3(GrafHabitacions, habitacio):
    component=nx.node_connected_component(GrafHabitacions, habitacio)
    G=GrafHabitacions.subgraph(component)
    return G

# tria la funció:
#per_on_passem = per_on_passem_1
#per_on_passem = per_on_passem_2
per_on_passem = per_on_passem_3
