Пример #1
0
 public void UjCsucs(Csucs csucs)
 {
     if (csucs != null && !Csucsok.Contains(csucs))
     {
         Csucsok.Add(csucs);
         if (csucs.Latvanyossag.Erdekesseg == ErdekessegiSzint.NagyonJó)
         {
             LatvanyossagokNagyonJo.UjFelvetel(csucs.Latvanyossag);
         }
     }
     else
     {
         Console.WriteLine($"A paraméter null vagy már szerepel a gráfban: {nameof(csucs)}");
     }
 }
Пример #2
0
 public void CsucsHozzaad(Csucs csucs)
 {
     if (csucs != null && !Csucsok.Contains(csucs))
     {
         Csucsok.Add(csucs);
         if (csucs.Muzeum.Erdekesseg == ErdekessegiSzint.NagyonJo)
         {
             NagyonJoMuzeumLancoltLista.BeszurasElejere(csucs.Muzeum);
         }
     }
     else
     {
         Console.WriteLine($"A paraméter null vagy már szerepel a gráfban: {nameof(csucs)}");
     }
 }
Пример #3
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);
        }
Пример #4
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)}");
     }
 }
Пример #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.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)}");
     }
 }