示例#1
0
        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);
        }
示例#3
0
 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));
                    }
                }
            }
        }
示例#8
0
 public WejscieNaZakret(WierzcholekGrafu ja)
 {
     this.ja = ja;
 }
 public KrawedzGrafu(WierzcholekGrafu wierzcholekA, WierzcholekGrafu wierzcholekB)
 {
     WierzcholekA = WierzcholekGrafu.ZwrocMniejszyWierzcholek(wierzcholekA, wierzcholekB);
     WierzcholekB = WierzcholekGrafu.ZwrocWiekszyWierzcholek(wierzcholekA, wierzcholekB);
 }
示例#10
0
 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;
 }