Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3. #include <iomanip> // potrzebne do precyzji
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. //Zmienne
  9. int
  10. miasto_start,
  11. miasto_nr;
  12. long sasiad = 0;
  13.  
  14. //deklaracja tablcy dwuwymiarowej dla wspolrzednych
  15. float droga_calkowita;
  16. float SUM = 0;
  17.  
  18. cout << "Ilosc miast: ";
  19. cin >> miasto_nr;
  20. float tab[miasto_nr][2];
  21.  
  22. //wpisanie danch do tablicy
  23. for (int i=0, j=1; i<miasto_nr; i++,j++)
  24. {
  25. cout << "Pozycja x miasta "<< j << " na osi xy\t";
  26. cin >> tab[i][0];
  27. cout << "Pozycja y miasta "<< j << " na osi xy\t";
  28. cin >> tab[i][1];
  29. cout << "\n";
  30. }
  31.  
  32. // wybór miasta startowego
  33. while(miasto_start <= 0 || miasto_start > miasto_nr){
  34. cout << "\nMiasto startowe: ";
  35. cin >> miasto_start;
  36. }
  37.  
  38. miasto_start --; //dopasowanie do pozyji w tablicy
  39. cout<<"\n\nTrasa wg. algorytmu najblizszego sasiada:\n";
  40. // stwozenie tablicy dla odwiedzonych miast
  41. bool odwiedzone_tab[miasto_nr];
  42. for(int i=0; i<miasto_nr; i++) odwiedzone_tab[i] = false;
  43. odwiedzone_tab[miasto_start] = true;
  44.  
  45. cout<<miasto_start+1;
  46. //OBLICZENIA
  47. int temp = miasto_start; // tablica pomocnicza
  48. for(int i=0; i<miasto_nr-1; i++)
  49. {
  50.  
  51. float miasto_x = tab[temp][0]; //wartość x miasta w którym jestem wyciagnieta z tablicy miast
  52. float miasto_y = tab[temp][1]; //wartość y miasta w którym jestem wyciagnieta z tablicy miast
  53.  
  54. float dystans=0, najblizsza_odleglosc=0;
  55. bool first = true;
  56.  
  57. for(int i=0; i<miasto_nr; i++)
  58. {
  59. if(odwiedzone_tab[i] == false)
  60. {
  61. cout<<setprecision(2); // Ustawienie precyzji wyniku
  62. 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]
  63. if(first == true)
  64. //author Pawel Wnuk <pawel@wnuk.me>
  65. {
  66. najblizsza_odleglosc = dystans+1;
  67. first = false;
  68. }
  69. if(dystans != 0 && dystans < najblizsza_odleglosc) // sprawdzenie czy odleglosc jest najmniejsza
  70. {
  71. najblizsza_odleglosc = dystans; //przypisanie wartosci dystans do najblizsza_odlegosc
  72. sasiad = i; // numer miast do ktorego odleglosc jest najmniejsza
  73. }
  74. }
  75. }
  76. SUM += najblizsza_odleglosc; // suma odleglosci przebytej drogi
  77. temp = sasiad;
  78. odwiedzone_tab[temp] = true;
  79. cout<<" -> "<<sasiad+1;
  80. }
  81. droga_calkowita == sqrt(pow((tab[miasto_start][0] - tab[sasiad][0]), 2) + pow((tab[miasto_start][1] - tab[sasiad][1]),2));
  82. cout<<" -> "<< droga_calkowita; // powrot do miasta startowego
  83. SUM += droga_calkowita;
  84. cout<<"\n\nCalkowita dlugosc trasy: "<<SUM<<"\n";
  85. return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement