Beispiel #1
0
        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);
        }
Beispiel #2
0
 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);
 }
Beispiel #3
0
        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");
        }
Beispiel #4
0
        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);
                }
Beispiel #6
0
        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"]);
        }
Beispiel #7
0
        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);
        }