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; }
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); }
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); }
public Trasa(Trasa trasa) { this.trasa = new List <int>(trasa.trasa); this.koszt = trasa.koszt; }
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); }
// Wpuszczenie do ruchu nowego pojazdu na dana trase public void GenerujPojazd(Trasa trasa) { pojazdy.Add(new Pojazd(trasa, bazaDanych)); }