// uruchomienie algorytmu, wybranie początkowego Miasta private void button1_Click_1(object sender, EventArgs e) { string wybrane = comboBox1.Text; Miasto results = lista.Find(delegate(Miasto bk) { return(bk.Nazwa == wybrane); } ); startowe = results; obecneQ = results; najktotszaDroga(obecneQ); }
// główna pętla programu private void najktotszaDroga(Miasto obecne) { int indeks; for (int i = 0; i < lista.Count - 1; i++) { obecne.zazanczony = true; indeks = obliczanieDrogi(obecne); obecne = lista[indeks]; richTextBox1.AppendText("Idę do: " + obecne.Nazwa + " Odległość: " + Math.Round(odleglos, 2) + Environment.NewLine); calkowitaOdleglosc += odleglos; } odleglos = Math.Sqrt((startowe.x - obecne.x) * (startowe.x - obecne.x) + (startowe.y - obecne.y) * (startowe.y - obecne.y)); calkowitaOdleglosc += odleglos; richTextBox1.AppendText("Wracam do " + startowe.Nazwa + " Odleglość: " + Math.Round(odleglos, 2) + Environment.NewLine + "Całkowita odległość: " + Math.Round(calkowitaOdleglosc, 2)); }
// szukanie Miasta o najkrtoszej drodze private int obliczanieDrogi(Miasto obecne) { double x1 = obecne.x; // pobranie x z obecengo Miasta double y1 = obecne.y; // pobranie y z obecnego Miasta double x2, y2, najkrotszaDroga = 0, droga = 0; for (int licznik = 0; licznik < lista.Count; licznik++) { if (licznik != lista.IndexOf(obecne) && lista[licznik].zazanczony == false) // sprawdzenie czy Miasto obecne nie jest takie samo jak Miasto sprawdzane i czy nie było już "odwiedzone" przez algorytm { x2 = lista[licznik].x; // pobranie x Miasta które sprawdzamy y2 = lista[licznik].y; // pobranie y Miasta które sprawdzamy droga = Math.Sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); // obliczenie odległości między punkatami na ośi współrzędnych if (najkrotszaDroga >= droga || najkrotszaDroga == 0) { najkrotszaDroga = droga; indeksMiasta = licznik; } } } odleglos = najkrotszaDroga; return(indeksMiasta); // zwrócenie indeksu Miasta w liscie o nakrotszej drodze }
private string display(Miasto result) { string wynik = result.Nazwa; return(wynik); }