Ejemplo n.º 1
0
        void crtaj_najkraci_put(int start, int kraj)
        {
            float[] dashValues = { 1, 2 };
            Pen     pen        = new Pen(Color.Blue, 7f);

            pen.DashPattern = dashValues;
            Djikstra dj = new Djikstra(broj_cvorova);

            if (dj.djikstraAlgorithm(graf_povezanosti, start, kraj) == false)
            {
                MessageBox.Show("Nema trazenog puta", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                return;
            }

            for (int i = 0; i < dj.path.Count - 1; i++)
            {
                shortest_path.DrawLine(pen, (float)cvorovi[dj.path[i]].rel_x, (float)cvorovi[dj.path[i]].rel_y,
                                       (float)cvorovi[dj.path[i + 1]].rel_x, (float)cvorovi[dj.path[i + 1]].rel_y);
            }
        }
Ejemplo n.º 2
0
        private void button_putanja_Click(object sender, EventArgs e)
        {
            shortest_path.Clear(Color.White);
            draw_lines();
            double mpozx, mpozy, fpozx, fpozy;

            try
            {
                mpozx = Convert.ToDouble(textbox_moja_pozicija_x.Text);
                mpozy = Convert.ToDouble(textbox_moja_pozicija_y.Text);
                fpozx = Convert.ToDouble(textbox_final_pozicija_x.Text);
                fpozy = Convert.ToDouble(textbox_final_pozicija_y.Text);
            }
            catch
            {
                return;
            }

            if (textbox_moja_pozicija_x.Text.Length != 0 && textbox_moja_pozicija_y.Text.Length != 0 && textbox_final_pozicija_x.Text.Length != 0 &&
                textbox_final_pozicija_y.Text.Length != 0 && listBox_posao.SelectedItems.Count == 0)
            {
                double mx, my, fx, fy;
                mx = (mpozx - 5) * (sirina_max - sirina_min) / (margin_right - margin_left) + sirina_min;
                my = (mpozy - 5) * (visina_max - visina_min) / (margin_down - margin_up) + visina_min;
                fx = (fpozx - 5) * (sirina_max - sirina_min) / (margin_right - margin_left) + sirina_min;
                fy = (fpozy - 5) * (visina_max - visina_min) / (margin_down - margin_up) + visina_min;
                dodaj_koordinate(mx, my, "Start");
                dodaj_koordinate(fx, fy, "Kraj");
                crtaj_najkraci_put(cvor_start, cvor_kraj);
            }

            else if (listBox_posao.SelectedItems.Count > 0)
            {
                string   posao = listBox_posao.SelectedItem.ToString();
                Djikstra dj    = new Djikstra(broj_cvorova);
                dj.djikstraAlgorithm(graf_povezanosti, cvor_start, cvor_kraj);
                int    minIndex = -1;
                double minValue = double.MaxValue;
                for (int i = 0; i < broj_cvorova; i++)
                {
                    if (cvorovi[i].podaci.Contains(posao) == true && dj.path.Contains(i))
                    {
                        minIndex = i;
                        break;
                    }
                    if (cvorovi[i].podaci.Contains(posao) == true && dj.dist[i] < minValue)
                    {
                        minValue = dj.dist[i];
                        minIndex = i;
                    }
                }
                if (minIndex == -1)
                {
                    MessageBox.Show("Nema trazenog posla u blizini.\nPrikazujemo put do odredista", "Info", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    crtaj_najkraci_put(cvor_start, cvor_kraj);
                }
                else
                {
                    crtaj_najkraci_put(cvor_start, minIndex);
                    crtaj_najkraci_put(minIndex, cvor_kraj);
                    SolidBrush brush = new SolidBrush(Color.Red);
                    g.FillEllipse(brush, (float)cvorovi[minIndex].rel_x - 10f, (float)cvorovi[minIndex].rel_y - 10f, 20f, 20f);
                }
            }
            listBox_posao.SelectedItems.Clear();
        }