Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3. #include <iomanip>
  4. using namespace std;
  5.  
  6. float dlugosc(int x1,int x2, int y1, int y2) //metoda
  7. {
  8. float dlugosc;
  9. dlugosc=sqrt(pow(x2-x1,2)+pow(y2-y1,2)); //wzór
  10. return dlugosc;
  11. }
  12.  
  13.  
  14. int main()
  15. {
  16. float suma_drogi=0,odleglosc_do_pierwszego=0; //zerujesz zmienne bo zle wyniki moga byc
  17. int sasiad;
  18. int x=0,y=0;
  19. int iloscpkt;
  20. int punkt_start=0;
  21. float wspolrzedne[100][100]; // tablica na 100 zankow
  22.  
  23. cout<<"Podaj ilosc punktow: ";
  24. cin>>iloscpkt;
  25.  
  26. for (int i=0,j=1;i<iloscpkt;i++,j++) //petla d wczytania wspolrzednych punktow
  27. {
  28. cout<<"Podaj wspolrzedna x punktu " <<j<< ": ";
  29. cin>>x;
  30. wspolrzedne[i][0]=x; //
  31. cout<<"Podaj wspolrzedna y punktu " <<j<< ": ";
  32. cin>>y;
  33. wspolrzedne[i][1]=y;
  34. }
  35.  
  36.  
  37. // tablice ci rozpisze
  38.  
  39. //X 0 0
  40. //y 0 0
  41. //X 1 0
  42. //y 0 1
  43.  
  44.  
  45.  
  46. while(punkt_start <= 0 || punkt_start > iloscpkt)// warunek masz na ilosc pkt
  47. {
  48. cout << "\nPunkt startowy: ";
  49. cin>>punkt_start;
  50. }
  51.  
  52. punkt_start--; // dostosowanie pozycji w tablicy bo tab masz od 0 do np 9 i ma 10 elementow wtedy
  53. bool odwiedzone[iloscpkt];
  54. for(int i=0;i<iloscpkt;i++)
  55. odwiedzone[i]=false; //wszystkie miasta trzeba oznaczyc jako false, czyli nieodwiedzone
  56.  
  57. odwiedzone[punkt_start]=true; //potem pierwsze miasto jako odwiedzone oznacza i kazde kolejne ktore odwiedzisz
  58. cout<<punkt_start+1; //wyswietlenie punktu startowego +1 czyli w tablicy inny index ma pokazac zamiast 0 a ma wypisac 1
  59. int temp = punkt_start;
  60.  
  61. for(int i=0;i<iloscpkt-1;i++){
  62. int x1=wspolrzedne[temp][0]; pobiera dane z tablicy co wpisywales zmienne x,y
  63. int y1=wspolrzedne[temp][1];
  64. float dystans=0, najblizsza_odleglosc=0;
  65. bool first = true; //oznacza ci miasto jako odwiedzone
  66.  
  67. for(int i=0;i<iloscpkt;i++){
  68. cout<<setprecision(3); // do cout ilosc przecinkow
  69. if(odwiedzone[i]==false) // jak nie odwiedzil miasta to liczy odleglosc
  70. {
  71. dystans=dlugosc(x1,wspolrzedne[i][0],y1,wspolrzedne[i][1]); wstawia do wzoru z mtody wsporzedne
  72. //cout<<"dyst: "<<dystans<<endl;
  73. if(first == true){ // jesli odwiedzil miasto to juz go nie liczy
  74. najblizsza_odleglosc = dystans+1; // tu
  75. first = false;
  76. }
  77. if(dystans != 0 && dystans < najblizsza_odleglosc) //sprawdza ci iteracyjnie w petli for czy jest najkrotsza odleglosc , porownoje te policzone
  78. {
  79. najblizsza_odleglosc = dystans;
  80. sasiad=i;
  81. }
  82. }
  83. }
  84. suma_drogi += najblizsza_odleglosc; //sumuje juz droge przebyta przez wszystkei pkt.
  85. temp = sasiad;
  86. odwiedzone[temp] = true;
  87. cout<<" -> "<<sasiad+1;
  88. }
  89. cout<<setprecision(3);
  90. cout<<" --> "<<punkt_start+1;
  91. odleglosc_do_pierwszego=dlugosc(wspolrzedne[punkt_start][0],wspolrzedne[sasiad][0],wspolrzedne[punkt_start][1],wspolrzedne[sasiad][1]); //odleglosc z ostatniego pkt do pkt 1 tego co wybrales
  92. cout<<"\nCalkowita dlugosc trasy: "<<odleglosc_do_pierwszego+suma_drogi;
  93.  
  94. //cout<<endl<<odleglosc_do_pierwszego<<endl<<suma_drogi;
  95.  
  96. return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement