Example #1
0
        public void NeueKante(string quelle, string ziel, double gewicht)
        {
            Knoten q = Knoten.Find(y => y.Name == quelle);
            Knoten z = Knoten.Find(y => y.Name == ziel);

            NeueKante(q, z, gewicht);
        }
Example #2
0
 public Kante(Knoten quellKnoten, Knoten zielKnoten, double gewicht)
 {
     Gewicht      = gewicht;
     QuellKnoten  = quellKnoten;
     ZielKnoten   = zielKnoten;
     IstInLoesung = false;
 }
Example #3
0
        //GeoWKT;Knoten1;Knoten2;Gewicht
        public static Graph LeseNetzwerk(string csvDateiPfad)
        {
            Graph n = new Graph();
            Dictionary <string, Knoten> geleseneKnoten = new Dictionary <string, Knoten>();
            Dictionary <string, Kante>  geleseneKanten = new Dictionary <string, Kante>();

            using (var reader = new StreamReader(csvDateiPfad, Encoding.Default))
            {
                //Kopfzeile
                reader.ReadLine();
                while (reader.Peek() >= 0)
                {
                    string zeile = reader.ReadLine().Trim();
                    if (!string.IsNullOrWhiteSpace(zeile))
                    {
                        string[] spaltenArray = zeile.Split(';');
                        string   k1           = spaltenArray[1];
                        string   k2           = spaltenArray[2];
                        if (double.TryParse(spaltenArray[3], out double w))
                        {
                            //check ob Kante (oder Gegenkante) bereits zugefügt
                            if (!(geleseneKanten.ContainsKey($"{k2}_{k1}") | geleseneKanten.ContainsKey($"{k1}_{k2}")))
                            {
                                //merke Knoten, falls noch nicht eingelesen
                                for (int i = 1; i <= 2; i++)
                                {
                                    if (!geleseneKnoten.TryGetValue(spaltenArray[i], out Knoten knoten))
                                    {
                                        knoten = new Knoten()
                                        {
                                            Name = spaltenArray[i]
                                        };
                                        geleseneKnoten.Add(knoten.Name, knoten);
                                    }
                                }
                                //merke Kante
                                Kante kante = new Kante(geleseneKnoten[k1], geleseneKnoten[k2], w);
                                geleseneKanten.Add($"{k1}_{k2}", kante);
                            }
                        }
                    }
                }
            }
            n.Knoten.AddRange(geleseneKnoten.Values);
            n.Kanten.AddRange(geleseneKanten.Values);
            return(n);
        }
Example #4
0
        private void Vereinige(Knoten k1, Knoten k2)
        {
            Graph baum1 = k1.Graph;
            Graph baum2 = k2.Graph;

            //baum 1 erweitern
            foreach (Knoten knotenAusBaum2 in baum2.Knoten)
            {
                baum1.KnotenZufuegen(knotenAusBaum2);
            }
            foreach (Kante kanteAusBaum2 in baum2.Kanten)
            {
                baum1.Kanten.Add(kanteAusBaum2);
            }
            //baum 2 entfernen
            Teilbäume.Remove(baum2);
        }
Example #5
0
 public void NeueKante(Knoten quelle, Knoten ziel, double gewicht)
 {
     Kanten.Add(new Kante(quelle, ziel, gewicht));
 }
Example #6
0
 public void KnotenZufuegen(Knoten knoten)
 {
     knoten.Graph = this;
     Knoten.Add(knoten);
 }
Example #7
0
 public Graph(Knoten startKnoten) : this()
 {
     KnotenZufuegen(startKnoten);
     Name = startKnoten.Name;
 }
Example #8
0
 private string FindeBaum(Knoten knoten)
 {
     return(knoten.Graph.Name);
 }