public static void NadiNajkraciPut(String s1, String s2) { vor c1 = skupČvorova[s1]; vor c2 = skupČvorova[s2]; foreach (Brid br in skupBridova.Values) { br.isDioPutaIliImaKarakteristiku = false; } dijkstrinAlgoritam.NadiPutIzmedu(c1, c2); //String messageText = "RJEŠENJE;\n"; int putID = 0; vor cc = c2; while (cc.bridPrethodnik != null) { putID++; cc.bridPrethodnik.isDioPutaIliImaKarakteristiku = true; //messageText += (putID + ".: " + cc.bridPrethodnik + "\n"); cc = cc.bridPrethodnik.PočetniČvor == cc ? cc.bridPrethodnik.ZavršniČvor : cc.bridPrethodnik.PočetniČvor; } //MessageBox.Show(messageText,"NAJKRAĆI PUT",MessageBoxButtons.OK); }
public Brid(string naziv, vor početni, vor završni, double vrijeme) { this.naziv = naziv; početniČvor = početni; završniČvor = završni; vrijemeProlaska = vrijeme; Console.WriteLine("Dodan brid od " + početniČvor.naziv + " do " + završniČvor.naziv + " s vremenom " + vrijemeProlaska); }
public void NadiPutIzmedu(vor c1, vor c2) { neprođeniČvorovi.Clear(); foreach (vor cv in Plan.skupČvorova.Values) { cv.udaljenostOdPocetka = Double.MaxValue; cv.bridPrethodnik = null; if (cv.naziv == c1.naziv) { cv.udaljenostOdPocetka = 0; } neprođeniČvorovi.Add(cv); } while (neprođeniČvorovi.Count != 0) { Console.WriteLine("NEPROĐENI ČVOROVI:"); foreach (vor cv in neprođeniČvorovi) { Console.WriteLine(cv); } vor trenutni = neprođeniČvorovi.First(); Console.WriteLine("trenutni cvor: " + trenutni); if (trenutni.naziv == c2.naziv) { Console.WriteLine("KRAJ"); break; } foreach (Brid susjedniBrid in trenutni.skupSusjednihBridova) { Console.WriteLine("susjed od " + trenutni + " -> " + susjedniBrid); double alt = trenutni.udaljenostOdPocetka + susjedniBrid.VrijemeProlaska; vor susjedniČvor = susjedniBrid.PočetniČvor == trenutni ? susjedniBrid.ZavršniČvor : susjedniBrid.PočetniČvor; if (alt < susjedniČvor.udaljenostOdPocetka) { neprođeniČvorovi.Remove(susjedniČvor); susjedniČvor.udaljenostOdPocetka = alt; susjedniČvor.bridPrethodnik = susjedniBrid; neprođeniČvorovi.Add(susjedniČvor); } } neprođeniČvorovi.Remove(trenutni); } Console.WriteLine("skup neprođenih čvorova je PRAZAN"); }
public static void NadiNajkraciPutUzPosao(String s1, String posao, String s2) { vor c1 = skupČvorova[s1]; vor p; try { p = skupČvorova[posao]; } catch { MessageBox.Show("Upišite postojeći čvor pa tražite ponovno", "Nepostojeći čvor!", MessageBoxButtons.OK); return; } vor c2 = skupČvorova[s2]; foreach (Brid br in skupBridova.Values) { br.isDioPutaIliImaKarakteristiku = false; } dijkstrinAlgoritam.NadiPutIzmedu(c1, p); //String messageText = "RJEŠENJE;\n"; int putID = 0; vor cc = p; while (cc.bridPrethodnik != null) { putID++; cc.bridPrethodnik.isDioPutaIliImaKarakteristiku = true; //messageText += (putID + ".: " + cc.bridPrethodnik + "\n"); cc = cc.bridPrethodnik.PočetniČvor == cc ? cc.bridPrethodnik.ZavršniČvor : cc.bridPrethodnik.PočetniČvor; } dijkstrinAlgoritam.NadiPutIzmedu(p, c2); cc = c2; while (cc.bridPrethodnik != null) { putID++; cc.bridPrethodnik.isDioPutaIliImaKarakteristiku = true; //messageText += (putID + ".: " + cc.bridPrethodnik + "\n"); cc = cc.bridPrethodnik.PočetniČvor == cc ? cc.bridPrethodnik.ZavršniČvor : cc.bridPrethodnik.PočetniČvor; } //MessageBox.Show(messageText,"NAJKRAĆI PUT",MessageBoxButtons.OK); }
private void PictureBox1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; foreach (Pen p in new Pen[] { pBridVanjska, pBridUnutarnja }) { foreach (Brid b in Plan.SkupBridova.Values) { vor cp = b.PočetniČvor, cz = b.ZavršniČvor; float xpNaMapi, ypNaMapi, xzNaMapi, yzNaMapi; xpNaMapi = (float)Skaliraj(cp.X, xlijevi, xdesni, 0, pictureBox1.Width); ypNaMapi = (float)Skaliraj(cp.Y, ygornji, ydonji, 0, pictureBox1.Height); xzNaMapi = (float)Skaliraj(cz.X, xlijevi, xdesni, 0, pictureBox1.Width); yzNaMapi = (float)Skaliraj(cz.Y, ygornji, ydonji, 0, pictureBox1.Height); if (b.isDioPutaIliImaKarakteristiku) { g.DrawLine(dijBridVanjska, xpNaMapi, ypNaMapi, xzNaMapi, yzNaMapi); g.DrawLine(dijBridUnutarnja, xpNaMapi, ypNaMapi, xzNaMapi, yzNaMapi); } else { g.DrawLine(p, xpNaMapi, ypNaMapi, xzNaMapi, yzNaMapi); } if (p == pBridUnutarnja) { bool tamniBrush = pictureBox1.BackColor.R > 100 && pictureBox1.BackColor.R > 100 && pictureBox1.BackColor.R > 100; g.DrawString(b.Naziv, fontKojiKoristim, tamniBrush ? textBrushDark : textBrushLight, (xpNaMapi + xzNaMapi) / 2 - 20, (ypNaMapi + yzNaMapi) / 2 - 10); } } } foreach (vor in Plan.skupČvorova.Values) { float xNaMapi, yNaMapi; xNaMapi = (float)Skaliraj(.X, xlijevi, xdesni, 0, pictureBox1.Width); yNaMapi = (float)Skaliraj(.Y, ygornji, ydonji, 0, pictureBox1.Height); string defaultni = "- odabrani čvor: "; if ((.naziv == odabraniPočetniObavijest.Text.Substring(defaultni.Length) && uPostupkuOznačavanjaČvorova == true) || .imaKarakteristiku) { Brush početni = new SolidBrush(Color.Blue); g.FillEllipse(početni, xNaMapi - 5, yNaMapi - 5, 10, 10); }
public static void UcitajPlan(String confFile) { try { string planString = System.IO.File.ReadAllText(@"gradovi/" + confFile); JObject planObjekt = JObject.Parse(planString); JArray cvorovi = (JArray)planObjekt["cvorovi"]; JArray bridovi = (JArray)planObjekt["bridovi"]; for (int i = 0; i < cvorovi.Count; i++) { skupČvorova[(string)cvorovi[i]["naziv"]] = new vor((string)cvorovi[i]["naziv"], (Double)cvorovi[i]["x"], (Double)cvorovi[i]["y"]); } for (int i = 0; i < bridovi.Count; i++) { string naz = (string)bridovi[i]["naziv"]; string poc = (string)bridovi[i]["pocetni"]; string zav = (string)bridovi[i]["zavrsni"]; double vrijeme = (double)bridovi[i]["vrijeme"]; DodajBrid(naz, poc, zav, vrijeme); // možda provjeriti rezultat izvršavanja //skupBridova[naz] = new Brid(naz, skupČvorova[poc], skupČvorova[zav], (double)bridovi[i]["vrijeme"]); //skupČvorova[poc].DodajSusjedniBrid(skupBridova[naz]); //skupČvorova[zav].DodajSusjedniBrid(skupBridova[naz]); } } catch (Exception e) { Console.WriteLine(e); } //nadiNajkraciPut(skupČvorova["PMF"], skupČvorova["Crnomerec"]); }
public static string DodajBrid(string naziv, string početni, string završni, double vrijeme) { string poruka = ""; if (početni == završni) { poruka = "Za brid mi trebaju dva različita čvora!"; return(poruka); } vor početniČvor = new vor("", 0, 0); vor završniČvor = new vor("", 0, 0); //nađi početni i završni čvor bool našaoPrvi = false, našaoDrugi = false; foreach (var p in skupČvorova) { if (p.Key == početni) { našaoPrvi = true; početniČvor = p.Value; } else if (p.Key == završni) { našaoDrugi = true; završniČvor = p.Value; } } if (našaoPrvi == false) { poruka = "Prvi čvor ne postoji (krivi unos)!"; } else if (našaoDrugi == false) { poruka = "Drugi čvor ne postoji (krivi unos)!"; } else { foreach (var p in skupBridova) { //p.Value je tipa Brid if (p.Value.PočetniČvor.naziv == početni && p.Value.ZavršniČvor.naziv == završni) { poruka = "Brid već postoji! Molimo dodajte neki drugi."; return(poruka); } } try { Brid noviBrid; skupBridova.Add(naziv, noviBrid = new Brid(naziv, početniČvor, završniČvor, vrijeme)); početniČvor.DodajSusjedniBrid(noviBrid); završniČvor.DodajSusjedniBrid(noviBrid); poruka = "Uspješno dodan brid od " + početni + " do " + završni + "."; } catch (ArgumentException) { poruka = "Već postoji brid s tim nazivom! Molimo odaberite drugi naziv."; } } return(poruka); }