Exemple #1
0
 public bool VezetEL(Csucs honnan, Csucs hova)
 {
     if (Elek.SingleOrDefault(el => el.Honnan == honnan && el.Hova == hova) != null)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Exemple #2
0
 public void ElTorol(El el)
 {
     if (el != null && Elek.Contains(el))
     {
         Elek.Remove(el);
     }
     else
     {
         Console.WriteLine($"A paraméter null vagy nincs ilyen él a gráfban: {nameof(el)}");
     }
 }
Exemple #3
0
 public void ElHozzaad(El el)
 {
     if (!Elek.Any(e => (el.Hova == e.Hova && el.Honnan == e.Honnan) || (el.Honnan == e.Hova && el.Hova == e.Honnan)))
     {
         Elek.Add(el);
     }
     else
     {
         Console.WriteLine($"Már van él a két múzeum között: {el.Honnan}, {el.Hova}");
     }
 }
Exemple #4
0
        private Dictionary <int, (Csucs csucs, float tavolsagStarttol, Csucs honnanJottem)> DijkstraElemek(Csucs start)
        {
            var dijkstraAdatszerkezet = new Dictionary <int, (Csucs csucs, float tavolsagStarttol, Csucs honnanJottem)>();
            var csucsPrioritasosSor   = new Dictionary <int, Csucs>();

            Csucsok.ForEach(csucs =>
            {
                dijkstraAdatszerkezet.Add(csucs.GetHashCode(), (csucs, int.MaxValue, null));
                csucsPrioritasosSor.Add(csucs.GetHashCode(), csucs);
            });

            var kiindulo = dijkstraAdatszerkezet[start.GetHashCode()];

            kiindulo.tavolsagStarttol = 0;
            dijkstraAdatszerkezet[start.GetHashCode()] = kiindulo;

            while (csucsPrioritasosSor.Any())
            {
                var vizsgalandoMaradek = dijkstraAdatszerkezet
                                         .Where(rekord => csucsPrioritasosSor.ContainsValue(rekord.Value.csucs));
                var kivalasztottLegkisebb = vizsgalandoMaradek
                                            .FirstOrDefault(rekord => rekord.Value.tavolsagStarttol == vizsgalandoMaradek.Min(elem => elem.Value.tavolsagStarttol))
                                            .Value;

                csucsPrioritasosSor.Remove(kivalasztottLegkisebb.csucs.GetHashCode());

                var szomszedok = Csucsok.Where(csucs => Elek.Any(el => GetEl(kivalasztottLegkisebb.csucs, csucs) != null)).ToList();

                foreach (var szomszedCsucs in szomszedok)
                {
                    var ossztavolsag = dijkstraAdatszerkezet[kivalasztottLegkisebb.csucs.GetHashCode()].tavolsagStarttol +
                                       GetEl(kivalasztottLegkisebb.csucs, szomszedCsucs).Tavolsag;

                    if (
                        ossztavolsag <
                        dijkstraAdatszerkezet[szomszedCsucs.GetHashCode()].tavolsagStarttol
                        )
                    {
                        var szomszed = dijkstraAdatszerkezet[szomszedCsucs.GetHashCode()];
                        szomszed.tavolsagStarttol = ossztavolsag;
                        szomszed.honnanJottem     = kivalasztottLegkisebb.csucs;
                        dijkstraAdatszerkezet[szomszedCsucs.GetHashCode()] = szomszed;
                    }
                }
            }

            return(dijkstraAdatszerkezet);
        }
Exemple #5
0
 public void CsucsTorol(Csucs csucs)
 {
     if (csucs != null && Csucsok.Contains(csucs))
     {
         Csucsok.Remove(csucs);
         Elek.RemoveAll(el => el.Honnan == csucs || el.Hova == csucs);
         if (csucs.Latvanyossag.Erdekesseg == ErdekessegiSzint.NagyonJó && LatvanyossagokNagyonJo.Contains(csucs.Latvanyossag))
         {
             LatvanyossagokNagyonJo.Torol(csucs.Latvanyossag);
         }
     }
     else
     {
         Console.WriteLine($"A paraméter null vagy nincs ilyen csúcs a gráfban: {nameof(csucs)}");
     }
 }
Exemple #6
0
 public void CsucsTorol(Csucs csucs)
 {
     if (csucs != null && Csucsok.Contains(csucs))
     {
         Csucsok.Remove(csucs);
         Elek.RemoveAll(el => el.Honnan == csucs || el.Hova == csucs);
         if (csucs.Muzeum.Erdekesseg == ErdekessegiSzint.NagyonJo && NagyonJoMuzeumLancoltLista.Contains(csucs.Muzeum))
         {
             NagyonJoMuzeumLancoltLista.Torles(csucs.Muzeum);
         }
     }
     else
     {
         Console.WriteLine($"A paraméter null vagy nincs ilyen csúcs a gráfban: {nameof(csucs)}");
     }
 }
Exemple #7
0
        private (List <Csucs> csucsok, List <El> elek)  UtatVisszafejt(Csucs vegpont, Csucs kezdopont)
        {
            var dijkstra = DijkstraElemek(kezdopont);
            var cel      = dijkstra.SingleOrDefault(rekord => rekord.Value.csucs == vegpont);

            var csucsok = new List <Csucs>();
            var elek    = new List <El>();

            while (cel.Value.honnanJottem != null)
            {
                csucsok.Add(cel.Value.csucs);
                cel = dijkstra.SingleOrDefault(rekord => rekord.Value.csucs == cel.Value.honnanJottem);
            }

            csucsok.Add(dijkstra.SingleOrDefault(rekord => rekord.Value.tavolsagStarttol == 0).Value.csucs);
            csucsok.Reverse();
            for (int i = 0; i <= csucsok.Count - 2; i++)
            {
                elek.Add(Elek.SingleOrDefault(el => el.Honnan == csucsok[i] && el.Hova == csucsok[i + 1]));
            }

            return(csucsok, elek);
        }
Exemple #8
0
 public El GetEl(Csucs honnan, Csucs hova)
 {
     return(Elek.SingleOrDefault(el => el.Honnan == honnan && el.Hova == hova));
 }
Exemple #9
0
 public bool VezetElInnen(Csucs csucs) => Elek.Any(el => el.Honnan == csucs);
Exemple #10
0
 public bool VezetElIde(Csucs csucs) => Elek.Any(el => el.Hova == csucs);
Exemple #11
0
 public void ElHozzaad(El el)
 {
     Elek.Add(el);
 }
Exemple #12
0
 private bool VezetElIde(Csucs csucs) => Elek.Any(el => el.Hova == csucs);