public static Csucs LegkozelebbiCsucs(IEnumerable <Csucs> csucsok, Csucs celCsucs, Graf graf) { double legrovidebbTavolsag = -1; Csucs legkozelebbiCSucs = null; int index = 0; foreach (Csucs csucs in csucsok) { double tavolsag = Tavolsag(csucs, celCsucs, graf); if (index == 0) { legrovidebbTavolsag = tavolsag; legkozelebbiCSucs = csucs; } else if (legrovidebbTavolsag > tavolsag) { legrovidebbTavolsag = tavolsag; legkozelebbiCSucs = csucs; } index += 1; } return(legkozelebbiCSucs); }
public bool VezetEL(Csucs honnan, Csucs hova) { if (Elek.SingleOrDefault(el => el.Honnan == honnan && el.Hova == hova) != null) { return(true); } else { return(false); } }
public double ElHossz(Csucs honnan, Csucs hova) { double hossz = 0; if (VezetEL(honnan, hova)) { El el = GetEl(honnan, hova); hossz = el.Tavolsag; } return(hossz); }
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)}"); } }
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)}"); } }
public List <Csucs> Szomszedok(Csucs aktualisCsucs, Graf graf) { List <Csucs> szomszedok = new List <Csucs>(); foreach (Csucs csucs in graf.Csucsok) { if (!csucs.Equals(aktualisCsucs)) //az aktuális csúcs nem szomszédja önmagának { if (Utkereses.Tavolsag(aktualisCsucs, csucs, graf) > 0) { szomszedok.Add(csucs); } } } return(szomszedok); }
public static List <Csucs> LegrovidebbUt(Map map, Csucs forrasCsucs, Csucs celCsucs, Graf graf) { //Útvonalkeresés a forrás és cél cúcsok között List <Csucs> utvonal = new List <Csucs>(); utvonal.Add(forrasCsucs); Csucs aktualisCsucs = forrasCsucs; while (true) { // Aktuális csúcs összes szomszédjának feltérképezése List <Csucs> osszesSzomszed = map.Szomszedok(aktualisCsucs, graf); //Duplikátumok elkerülése IEnumerable <Csucs> szomszedok = from szomszed in osszesSzomszed where !utvonal.Contains(szomszed) select szomszed; //Kilép, ha nincs szomszéd, vagy elértük a cél csúcsot if (szomszedok.Count() == 0) { break; } if (szomszedok.Contains(celCsucs)) { utvonal.Add(celCsucs); break; } // Kiválasztjuk a következő csúcsot (a legközelebbi szomszédot) Csucs legkozelebbiCsucs = LegkozelebbiCsucs(szomszedok, celCsucs, graf); utvonal.Add(legkozelebbiCsucs); aktualisCsucs = legkozelebbiCsucs; } return(utvonal); }
public El(Csucs honnan, Csucs hova, float tavolsag) { Honnan = honnan; Hova = hova; Tavolsag = tavolsag; }
public static double Tavolsag(Csucs csucs1, Csucs csucs2, Graf graf) { double tavolsag = graf.ElHossz(csucs1, csucs2); return(tavolsag); }
public El GetEl(Csucs honnan, Csucs hova) { return(Elek.SingleOrDefault(el => el.Honnan == honnan && el.Hova == hova)); }
public bool VezetElInnen(Csucs csucs) => Elek.Any(el => el.Honnan == csucs);
public bool VezetElIde(Csucs csucs) => Elek.Any(el => el.Hova == csucs);