コード例 #1
0
ファイル: Sommet.cs プロジェクト: kaduck/TheorieDesGraphes
 /// <summary>
 /// Surcharge de l'opérateur d'équivalence on regarde le libelle
 /// </summary>
 public bool Egal(Sommet b)
 {
     return(Libelle == b.Libelle);
 }
コード例 #2
0
 public Arete(Sommet origine, Sommet destination)
 {
     Origine     = origine;
     Destination = destination;
 }
コード例 #3
0
        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);
        }
コード例 #4
0
 private static bool RechercherArc(Sommet origine, Sommet destination, List <Arete> ensembleArcs)
 {
     return(ensembleArcs.Exists(t => (t.Destination.Egal(destination) && t.Origine.Egal(origine))));
 }
コード例 #5
0
 private static List <Arete> RechercherArcsOrigine(Sommet origine, List <Arete> ensembleArcs)
 {
     return(ensembleArcs.Where(t => t.Origine == origine).ToList());
 }
コード例 #6
0
 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)));
 }
コード例 #7
0
ファイル: Main.cs プロジェクト: kaduck/TheorieDesGraphes
 private void EcrireInstruction(Sommet sommet)
 {
     lbInstruction.Text = "Choisissez une position pour " + sommet.Libelle + " : ";
 }