import networkx as nx
import matplotlib.pyplot as plt

# Q1
def construit_reseau_5g():
    G = nx.DiGraph()
    # ajouter les aretes
    print("Graphe orienté avec 6 sommets et 9 arcs pondérés.")
    return G

#Q2

def dijkstra_tous_chemins(G):
    #Diskstra (chemin depuis A vers les autres sommets)
    dist = nx.single_source_dijkstra_path_length(G, 'A')
    #Diskstra (longueur depuis A vers les autres sommets)
    paths = nx.single_source_dijkstra_path(G, 'A')
    
    print("\nDistances minimales depuis A (ms):")
    for node, d in dist.items():
        print(f"  {node}: {d} ms (chemin: {paths[node]})")
    print(f"\nChemin optimal A→F: {paths['F']} ")
    return dist, paths

# Q3 : 
# chemin est une liste de sommet

# Ne pas modifier la fonction ci-dessous :
def affiche_graphe_chemin(G, chemin):
    pos = nx.circular_layout(G)
    # Toutes les arêtes en noir
    nx.draw_networkx_nodes(G, pos, node_color='lightblue', node_size=800)
    nx.draw_networkx_edges(G, pos, width=2, alpha=0.7)
    
    labels = nx.get_edge_attributes(G, "weight")
    nx.draw_networkx_edge_labels(G, pos, edge_labels=labels)
    
    # Arêtes du chemin en rouge épais
    aretes_chemin = list(zip(chemin, chemin[1:]))
    nx.draw_networkx_edges(G, pos, edgelist=aretes_chemin, 
                          edge_color='red', width=4, alpha=0.9)
    
    nx.draw_networkx_labels(G, pos, font_size=16, font_weight='bold')
    
    # Labels poids seulement sur arêtes du chemin (optionnel, plus clair)
    edge_labels = {edge: G[edge[0]][edge[1]]['weight'] for edge in aretes_chemin}
    nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=12)
    
    plt.title("Plus court chemin A → E (rouge)")
    plt.axis('off')
    plt.tight_layout()
    plt.show()
    
    


#On construit le graphe  
G = construit_reseau_5g()
# On applique dijstra
    
# On affiche_graphe_chemin(G, chemin) avec le bon chemin
    
# On enlève une arete -> G.remove_edges_from([('C','E')])

# On appliquer Dijkstra
    
# On affiche_graphe_chemin(G, chemin) avec le bon chemin
   