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}"); } }
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); }
public bool VezetElInnen(Csucs csucs) => Elek.Any(el => el.Honnan == csucs);
public bool VezetElIde(Csucs csucs) => Elek.Any(el => el.Hova == csucs);
private bool VezetElIde(Csucs csucs) => Elek.Any(el => el.Hova == csucs);