/// <summary> /// Surcharge de l'opérateur d'équivalence on regarde le libelle /// </summary> public bool Egal(Sommet b) { return(Libelle == b.Libelle); }
public Arete(Sommet origine, Sommet destination) { Origine = origine; Destination = destination; }
public static List <Sommet> SommetArticulation(Graphe graphe) { int previsite; List <Sommet> pileSommets = new List <Sommet>(); List <Sommet> listeSommetArticulation = new List <Sommet>(); List <Arete> ensembleArcs = new List <Arete>(); List <Arete> listeAretes = graphe.listeArete; List <Sommet> listeSommets = graphe.listeSommet.Where(t => t.Marque == EnumMarque.NonMarque).ToList(); while (!VerifierMarquage(listeSommets)) { previsite = 1; listeSommets = listeSommets.Where(t => t.Marque == EnumMarque.NonMarque).ToList(); listeSommets[0].Marque = EnumMarque.Ouvert; pileSommets.Add(graphe.listeSommet[0]); listeSommets[0].Previsite = previsite; listeSommets[0].Hauteur = previsite; previsite++; while (pileSommets.Count > 0) { if (ExisteSommetAdjacent(pileSommets.Last(), listeSommets, listeAretes)) { Sommet y = ObtenirSommetsAdjacents(pileSommets.Last(), listeSommets, listeAretes).First(); listeSommets.First(t => t == y).Marque = EnumMarque.Ouvert; ensembleArcs.Add(new Arete(pileSommets.Last(), y)); pileSommets.Add(listeSommets.First(t => t == y)); //ensembleArcs.Add(listeAretes.First(t => t.Destination == y && t.Origine == pileSommets.Last() // || t.Destination == pileSommets.Last() && t.Origine == y)); listeSommets.First(t => t == y).Previsite = previsite; previsite++; listeSommets.First(t => t == y).Hauteur = listeSommets.First(t => t == y).Previsite; } else { listeSommets.First(t => t == pileSommets.Last()).Marque = EnumMarque.Ferme; List <Sommet> listeSommetSuccesseur = ObtenirSommetsAdjacents(pileSommets.Last(), listeSommets, listeAretes, false); List <Sommet> SommetsASupprimer = new List <Sommet>(); foreach (Sommet item in listeSommetSuccesseur) { if (RechercherArc(item, pileSommets.Last(), ensembleArcs)) { SommetsASupprimer.Add(item); } } foreach (Sommet item in SommetsASupprimer) { listeSommetSuccesseur.Remove(item); } foreach (Sommet successeur in listeSommetSuccesseur) { listeSommets.First(t => t == pileSommets.Last()).Hauteur = (listeSommets.First(t => t == pileSommets.Last()).Hauteur < successeur.Hauteur) ? listeSommets.First(t => t == pileSommets.Last()).Hauteur : successeur.Hauteur; } pileSommets.Remove(pileSommets.Last()); } } if (ObtenirSommetsAdjacents(listeSommets[0], listeSommets, ensembleArcs, false).Count >= 2) { listeSommetArticulation.Add(listeSommets[0]); } foreach (Sommet x in listeSommets) { if (listeSommets.Count > 0 && Different(x, listeSommets[0])) { List <Arete> listeArcSuccesseur = RechercherArcsOrigine(x, ensembleArcs); foreach (Arete y in listeArcSuccesseur) { if (y.Destination.Hauteur >= x.Previsite) { listeSommetArticulation.Add(x); } } } } } return(listeSommetArticulation); }
private static bool RechercherArc(Sommet origine, Sommet destination, List <Arete> ensembleArcs) { return(ensembleArcs.Exists(t => (t.Destination.Egal(destination) && t.Origine.Egal(origine)))); }
private static List <Arete> RechercherArcsOrigine(Sommet origine, List <Arete> ensembleArcs) { return(ensembleArcs.Where(t => t.Origine == origine).ToList()); }
private static bool ExisteSommetAdjacent(Sommet sommet, List <Sommet> listeSommets, List <Arete> listeAretes) { return(listeAretes.Exists(t => (t.Destination == sommet && t.Origine.Marque == EnumMarque.NonMarque) || (t.Origine == sommet && t.Destination.Marque == EnumMarque.NonMarque))); }
private void EcrireInstruction(Sommet sommet) { lbInstruction.Text = "Choisissez une position pour " + sommet.Libelle + " : "; }