Advertisement
Cieslin

PRIR

Oct 11th, 2018
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <fstream>
  3. #include <algorithm>
  4. #include <iostream>
  5.  
  6. struct DrogaKomiwojazera
  7. {
  8. float kosztDrogi;
  9. int * przebytaDroga;
  10. };
  11.  
  12. void wczytaj_macierz(std::ifstream & plik, float ** macierz, int & rozmiar);
  13. void zwolnij_pamiec(float ** macierz, int rozmiar);
  14. float koszt_drogi(float ** macierz, const int * p, int rozmiar);
  15.  
  16. int _tmain(int argc, _TCHAR* argv[])
  17. {
  18. std::ifstream plik;
  19. int rozmiar;
  20. using namespace std;
  21. plik.open("we.txt");
  22. plik >> rozmiar;
  23. plik.get();
  24. float ** macierz = new float*[rozmiar];
  25. for (int i = 0; i < rozmiar; i++) {
  26. macierz[i] = new float[rozmiar];
  27. }
  28. wczytaj_macierz(plik, macierz, rozmiar);
  29. plik.close();
  30. int* miasta = new int[rozmiar];
  31. for (int i = 0; i < rozmiar; i++)
  32. {
  33. miasta[i] = i;
  34. }
  35. DrogaKomiwojazera najlepszaDroga;
  36. najlepszaDroga.przebytaDroga = new int[rozmiar];
  37. najlepszaDroga.kosztDrogi = koszt_drogi(macierz, miasta, rozmiar);
  38. bool loop = true;
  39. while (loop)
  40. {
  41. loop = next_permutation(miasta, miasta + rozmiar);
  42. float droga = koszt_drogi(macierz, miasta, rozmiar);
  43. if (droga < najlepszaDroga.kosztDrogi)
  44. {
  45. najlepszaDroga.kosztDrogi = droga;
  46. for (int i = 0; i < rozmiar; i++) {
  47. najlepszaDroga.przebytaDroga[i] = miasta[i];
  48. }
  49. cout << "Najlepsza droga: ";
  50. for (int i = 0; i< rozmiar; i++)
  51. cout << miasta[i] << ", ";
  52. cout << endl;
  53. cout << "Koszt najkrótszej drogi: " << najlepszaDroga.kosztDrogi << endl;
  54. }
  55. }
  56. cout << "Najlepsza droga: ";
  57. for (int i = 0; i< rozmiar; i++)
  58. cout << najlepszaDroga.przebytaDroga[i] << ", ";
  59. cout << endl;
  60. cout << "Koszt najkrótszej drogi: " << najlepszaDroga.kosztDrogi << endl;
  61. cin.get();
  62. zwolnij_pamiec(macierz, rozmiar);
  63. return 0;
  64. }
  65.  
  66. void wczytaj_macierz(std::ifstream & plik, float ** macierz, int & rozmiar)
  67. {
  68. for (int i = 0; i < rozmiar; i++)
  69. {
  70. for (int j = 0; j < rozmiar; j++)
  71. plik >> macierz[i][j];
  72. }
  73. }
  74.  
  75. void zwolnij_pamiec(float ** macierz, int rozmiar)
  76. {
  77. for (int i = 0; i < rozmiar; i++) {
  78. delete macierz[i];
  79. }
  80. delete[] macierz;
  81. }
  82.  
  83. float koszt_drogi(float ** macierz, const int * p, int rozmiar)
  84. {
  85. DrogaKomiwojazera droga;
  86. float kosztDrogi = 0.0f;
  87. for (int i = 0; i < rozmiar; i++)
  88. {
  89. int x = i;
  90. int y = i + 1;
  91. if (i + 1 == rozmiar) {
  92. y = 0;
  93. }
  94. kosztDrogi += macierz[p[i]][p[y]];
  95. }
  96. return kosztDrogi;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement