コード例 #1
0
        public Pojazd(Trasa trasa, DaneORuchu bazaDanych)
        {
            rejestracja = nastepnaRejestracja;
            nastepnaRejestracja++;

            czasJazdy = 0;

            this.trasa      = new Trasa(trasa);
            this.bazaDanych = bazaDanych;

            bazaDanych.ZajerejstrujWjazd(rejestracja, trasa.trasa[0], trasa.trasa[1]);
            czyJedzie = true;
        }
コード例 #2
0
ファイル: Mapa.cs プロジェクト: marmaj8/RuchSamochodowSI
        private Trasa PodajTrase(Trasa trasaPoczatkowa, int skad, int przez, int koniec, List <int> koszty)
        {
            Trasa        trasa = new Trasa(trasaPoczatkowa);
            Skrzyzowanie sk    = skrzyzowania.First(s => s.PodajId() == przez);

            trasa.DodajSkrzyzowanie(przez, sk.WagaOdcinka(skad));
            // jestli to koneic trasy
            if (przez == koniec)
            {
                koszty.Add((int)trasa.koszt);
                return(trasa);
            }
            // jesli znaleziono szybsza trase kasujemy
            if (koszty.Count() > 0 && trasa.koszt > koszty.Min())
            {
                return(null);
            }
            // jesli trasa jest cyklem trase kasujemy
            if (trasa.CzyCykl())
            {
                return(null);
            }

            List <Trasa> mozliwe = new List <Trasa>();


            foreach (int kierunek in sk.PodajKierunki())
            {
                if (kierunek != -1)
                {
                    Trasa tmp = PodajTrase(trasa, przez, kierunek, koniec, koszty);
                    if (tmp != null)
                    {
                        mozliwe.Add(tmp);
                    }
                }
            }


            if (mozliwe.Count() > 0)
            {
                Trasa tmp = mozliwe.OrderBy(m => m.koszt).First();
                koszty.Add((int)tmp.koszt);
                return(tmp);
            }
            return(null);
        }
コード例 #3
0
ファイル: Mapa.cs プロジェクト: marmaj8/RuchSamochodowSI
        public Trasa PodajTrase(int poczatek, int koniec)
        {
            // sprawdzenie czy wyznaczylismy juz taka trase
            Trasa trasa = ZapisanaTrasa(poczatek, koniec);

            if (trasa != null)
            {
                return(trasa);
            }

            List <Trasa> mozliwe = new List <Trasa>();

            trasa = new Trasa(poczatek);

            List <int> koszty = new List <int>();

            Skrzyzowanie sk = skrzyzowania.First(s => s.PodajId() == poczatek);

            foreach (int kierunek in sk.PodajKierunki())
            {
                if (kierunek != -1)
                {
                    Trasa tmp = PodajTrase(trasa, poczatek, kierunek, koniec, koszty);
                    if (tmp != null)
                    {
                        mozliwe.Add(tmp);
                    }
                }
            }


            if (mozliwe.Count() > 0)
            {
                Trasa tmp = mozliwe.OrderBy(m => m.koszt).First();
                zapisaneTrasy.Add(tmp);
                return(tmp);
            }

            return(null);
        }
コード例 #4
0
ファイル: Trasa.cs プロジェクト: marmaj8/RuchSamochodowSI
 public Trasa(Trasa trasa)
 {
     this.trasa = new List <int>(trasa.trasa);
     this.koszt = trasa.koszt;
 }
コード例 #5
0
ファイル: Mapa.cs プロジェクト: marmaj8/RuchSamochodowSI
        public List <Trasa> GenerujTrasy(int godzina, double mnoznik = 10, double maxOdchyl = 0.2)
        {
            Random       rand       = new Random();
            List <Trasa> trasy      = new List <Trasa>();
            List <int>   generowane = WielkosciGenerowanegoRuchu(godzina);
            List <int>   kasowane   = WielkosciKasowanegoRuchu(godzina);
            int          gen        = generowane.Sum();
            int          kas        = kasowane.Sum();
            int          ile        = (int)(gen * mnoznik * (1 - (rand.NextDouble() - 0.5) * 2 * maxOdchyl));
            int          start;
            int          koniec;
            int          sum;
            int          i;

            while (ile > 0)
            {
                // LOSOWANIE WARTOSCI POCZATKA I KONCA
                start  = rand.Next(gen);
                koniec = rand.Next(kas);

                // ZNALEZIENIE POCZATKA I KONCA
                // O WYLOSOWANEJ WARTOSCI
                sum = 0;
                i   = 0;
                foreach (int g in generowane)
                {
                    sum += g;
                    if (start < sum)
                    {
                        start = skrzyzowania[i].id;
                        break;
                    }
                    i++;
                }
                sum = 0;
                i   = 0;
                foreach (int k in kasowane)
                {
                    sum += k;
                    if (koniec < sum)
                    {
                        koniec = skrzyzowania[i].id;
                        break;
                    }
                    i++;
                }

                if (start != koniec)
                {
                    Trasa tmp = PodajTrase(start, koniec);

                    if (tmp.trasa.Count() > 2)
                    {
                        trasy.Add(tmp);
                        ile--;
                    }
                }
            }

            return(trasy);
        }
コード例 #6
0
ファイル: Symulacja.cs プロジェクト: marmaj8/RuchSamochodowSI
 // Wpuszczenie do ruchu nowego pojazdu na dana trase
 public void GenerujPojazd(Trasa trasa)
 {
     pojazdy.Add(new Pojazd(trasa, bazaDanych));
 }