Witam serdecznie, jest to mój pierwszy post na tym forum :) Potrzebuje o dodatkowe opisanie jak działa algorytm, który umieszczam. Zaznaczam że nie jestem jego autorem, ale potrzebuje zrozumieć co do czego służy. Umieściłem w poszczególnych komentarzach to czego nie wiem.
#include <iostream>
#include <math.h>
#include <iomanip> // potrzebne do precyzji
using namespace std;
int main()
{
//Zmienne
int
miasto_start,
miasto_nr,
sasiad = 0; // dlaczego sąsiad = 0 ?
//deklaracja tablcy dwuwymiarowej dla wspolrzednych
float droga_calkowita;
float SUM = 0;
cout << "Ilosc miast: ";
cin >> miasto_nr;
float tab[miasto_nr][2];
//wpisanie danch do tablicy
for (int i=0, j=1; i<miasto_nr; i++,j++)
{
cout << "Pozycja x miasta "<< j << " na osi xy\t";
cin >> tab[i][0];
cout << "Pozycja y miasta "<< j << " na osi xy\t"; // dane są wprowadzane do dwóch oddzielnych tablic?
cin >> tab[i][1];
cout << "\n";
}
// wybór miasta startowego
while(miasto_start <= 0 || miasto_start > miasto_nr){
cout << "\nMiasto startowe: ";
cin >> miasto_start;
}
miasto_start --; //dopasowanie do pozyji w tablicy
cout<<"\n\nTrasa wg. algorytmu najblizszego sasiada:\n";
// stwozenie tablicy dla odwiedzonych miast
bool odwiedzone_tab[miasto_nr];
for(int i=0; i<miasto_nr; i++) odwiedzone_tab[i] = false;
odwiedzone_tab[miasto_start] = true;
cout<<miasto_start+1;
//OBLICZENIA
int temp = miasto_start; // tablica pomocnicza
for(int i=0; i<miasto_nr-1; i++)
{
float miasto_x = tab[temp][0]; //wartość x miasta w którym jestem wyciagnieta z tablicy miast
float miasto_y = tab[temp][1]; //wartość y miasta w którym jestem wyciagnieta z tablicy miast
float dystans=0, najblizsza_odleglosc=0;
bool first = true;
for(int i=0; i<miasto_nr; i++)
{
if(odwiedzone_tab[i] == false)
{
cout<<setprecision(2); // Ustawienie precyzji wyniku
dystans = sqrt(pow((miasto_x - tab[i][0]), 2) + pow((miasto_y - tab[i][1]),2)); //obiczneie odleglosci (x1-x2)^2 + (y1-y2)^2 [pierwiatek z wartosci]
if(first == true)
{
najblizsza_odleglosc = dystans+1; // dlaczego jest dystans +1
first = false;
}
if(dystans != 0 && dystans < najblizsza_odleglosc) // sprawdzenie czy odleglosc jest najmniejsza
{
najblizsza_odleglosc = dystans; //przypisanie wartosci dystans do najblizsza_odlegosc
sasiad = i; // numer miast do ktorego odleglosc jest najmniejsza
}
}
}
SUM += najblizsza_odleglosc; // suma odleglosci przebytej drogi
temp = sasiad;
odwiedzone_tab[temp] = true;
cout<<" -> "<<sasiad+1;
}
cout<<" -> "< droga_calkowita = sqrt(pow((tab[miasto_start][0] - tab[sasiad][0]), 2) + pow((tab[miasto_start][1] - tab[sasiad][1]),2)); // powrot do miasta startowego
SUM += droga_calkowita;
cout<<"\n\nCalkowita dlugosc trasy: "<<SUM<<"\n";
return 0;
}