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); } }
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(); }