public Pieszy(WierzcholekGrafu start, List <WierzcholekGrafu> trasa) { this.trasa = trasa.ConvertAll(obiekt => (WierzcholekChodnika)obiekt); TworzObrazek(); UstawPozycje(new Punkt <double>(start.Pozycja.X * 40 + obrazek.Width / 2, start.Pozycja.Y * 40 + obrazek.Height / 2)); }
public static KrawedzGrafu StworzDroge(WierzcholekGrafu wierzcholekA, WierzcholekGrafu wierzcholekB) { KrawedzGrafu nowaDroga = new KrawedzGrafu(wierzcholekA, wierzcholekB); wierzcholekA.Krawedzie.Add(nowaDroga); wierzcholekB.Krawedzie.Add(nowaDroga); return(nowaDroga); }
public static WierzcholekGrafu ZwrocWiekszyWierzcholek(WierzcholekGrafu wierzcholekA, WierzcholekGrafu wierzcholekB) { if (Punkt <double> .ZwrocPozycjeWiekszego(wierzcholekA.Pozycja, wierzcholekB.Pozycja).Equals(wierzcholekA.Pozycja)) { return(wierzcholekA); } else { return(wierzcholekB); } }
public Samochod(WierzcholekGrafu start, List <WierzcholekGrafu> trasa) { this.trasa = trasa.ConvertAll(obiekt => (WierzcholekDrogi)obiekt); this.ObecnaPozycja = (WierzcholekDrogi)start; TworzObrazek(); Punkt <double> przesuniecie = ((WejscieNaPunktWejscia)ObecnaPozycja.ObiektDrogi).PunktWejsciowy(); UstawPozycje(new Punkt <double>(start.Pozycja.X * 80 + przesuniecie.X, start.Pozycja.Y * 80 + przesuniecie.Y)); }
public WierzcholekGrafu ZwrocPrzeciwnyWierzcholek(WierzcholekGrafu wierzcholek) { if (WierzcholekA == wierzcholek) { return(WierzcholekB); } else if (WierzcholekB == wierzcholek) { return(WierzcholekA); } else { throw new Exception("Brak połączonego wierzchołka"); } }
public List <WierzcholekGrafu> ZwrocScierzke(WierzcholekGrafu start, WierzcholekGrafu koniec) { List <Wezel> wezly = new List <Wezel>(); for (int i = 0; i < infrastruktura.Count; ++i) { wezly.Add(new Wezel(infrastruktura[i])); } wezly.Find(obiekt => obiekt.Klucz == start).Dystans = 0; List <Wezel> kolejka = new List <Wezel>(); kolejka.Add(wezly.Find(obiekt => obiekt.Klucz == start)); wezly.Find(obiekt => obiekt.Klucz == start).CzyDodawany = true; while (kolejka.Count > 0) { Wezel aktualnyWezel = kolejka.OrderBy(obiekt => obiekt.Dystans).First(); if (aktualnyWezel.Klucz == koniec) { break; } foreach (KrawedzGrafu polaczenie in aktualnyWezel.Klucz.Krawedzie) { Wezel sasiedniWezel = wezly.Find(obiekt => obiekt.Klucz == polaczenie.ZwrocPrzeciwnyWierzcholek(aktualnyWezel.Klucz)); if (sasiedniWezel.Dystans > aktualnyWezel.Dystans + polaczenie.DlugoscKrawedzi()) { sasiedniWezel.Dystans = aktualnyWezel.Dystans + polaczenie.DlugoscKrawedzi(); sasiedniWezel.Poprzednik = aktualnyWezel; } if (!sasiedniWezel.CzyDodawany) { kolejka.Add(sasiedniWezel); sasiedniWezel.CzyDodawany = true; } } kolejka.Remove(aktualnyWezel); } return(ZnajdzTraseZPoprzednikow(wezly, start, koniec)); }
private void PrzeszukajGraf(Dictionary <WierzcholekGrafu, bool> listaOdwiedzen) { Stack <WierzcholekGrafu> stos = new Stack <WierzcholekGrafu>(); stos.Push(infrastruktura[0]); while (stos.Count > 0) { WierzcholekGrafu wierzcholek = stos.Pop(); if (!listaOdwiedzen[wierzcholek]) { listaOdwiedzen[wierzcholek] = true; foreach (KrawedzGrafu poloczenie in wierzcholek.Krawedzie) { stos.Push(poloczenie.ZwrocPrzeciwnyWierzcholek(wierzcholek)); } } } }
public WejscieNaZakret(WierzcholekGrafu ja) { this.ja = ja; }
public KrawedzGrafu(WierzcholekGrafu wierzcholekA, WierzcholekGrafu wierzcholekB) { WierzcholekA = WierzcholekGrafu.ZwrocMniejszyWierzcholek(wierzcholekA, wierzcholekB); WierzcholekB = WierzcholekGrafu.ZwrocWiekszyWierzcholek(wierzcholekA, wierzcholekB); }
public WejscieNaPrzejscieDlaPieszych(PrzejscieDlaPieszych przejscieDlaPieszych, WierzcholekGrafu przeciwnyWierzcholek) { this.przejscieDlaPieszych = przejscieDlaPieszych; this.przeciwnyWierzcholek = przeciwnyWierzcholek; }
//metoda która z poprzedników węzła potrafi znaleźć trasę private List <WierzcholekGrafu> ZnajdzTraseZPoprzednikow(List <Wezel> poprzednicy, WierzcholekGrafu start, WierzcholekGrafu koniec) { List <WierzcholekGrafu> trasa = new List <WierzcholekGrafu>(); Wezel nastepny = poprzednicy.Find(obiekt => obiekt.Klucz == koniec); while (nastepny.Poprzednik != null) { trasa.Add(nastepny.Klucz); nastepny = nastepny.Poprzednik; } return(trasa.Reverse <WierzcholekGrafu>().ToList()); }
public Wezel(WierzcholekGrafu klucz) { Klucz = klucz; }