Guest User

Untitled

a guest
Nov 18th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <locale.h>
  4. #include <vector>
  5. #include <fstream>
  6.  
  7. using namespace std;
  8.  
  9. const int INF = 0X7FFFFFFF;
  10. const int n = 9;
  11.  
  12. int Translate(char* c)
  13. {
  14. int n = 0;
  15. while(isdigit(*c))
  16. {
  17. n *= 10;
  18. n += (*c - '0');
  19. c++;
  20. }
  21. return n;
  22. }
  23.  
  24. void out(vector<int> p, int start, int end)
  25. {
  26. if (end == start)
  27. {
  28. cout << end + 1;
  29. return;
  30. }
  31. out(p, start, p[end]);
  32. cout << '-' << end + 1;
  33. return;
  34. }
  35.  
  36. int main()
  37. {
  38.  
  39. setlocale(LC_ALL, "Russian");
  40. vector<vector<pair<int, double>>> matr(n);
  41. /*
  42. matr[0].resize(3);
  43. matr[0][0].first = 1;
  44. matr[0][0].second = 3;
  45. matr[0][1].first = 2;
  46. matr[0][1].second = 2;
  47. matr[0][2].first = 3;
  48. matr[0][2].second = 4;
  49.  
  50. matr[1].resize(2);
  51. matr[1][0].first = 4;
  52. matr[1][0].second = 2;
  53. matr[1][1].first = 5;
  54. matr[1][1].second = 4;
  55.  
  56. matr[2].resize(1);
  57. matr[2][0].first = 4;
  58. matr[2][0].second = 1;
  59.  
  60. matr[3].resize(2);
  61. matr[3][0].first = 2;
  62. matr[3][0].second = 1;
  63. matr[3][1].first = 5;
  64. matr[3][1].second = 3.5;
  65.  
  66. matr[4].resize(1);
  67. matr[4][0].first = 5;
  68. matr[4][0].second = 3;*/
  69.  
  70.  
  71. int start = 0, end = 8;
  72.  
  73. const char* inFileName = "in.txt";
  74.  
  75. char** mas = new char*[19];
  76. for (int i = 0; i < 19; i++)
  77. mas[i] = new char[7];
  78.  
  79. FILE* file = fopen(inFileName, "rb");
  80.  
  81. if (file == NULL)
  82. {
  83. perror("Ошибка открытия фйла");
  84. return -1;
  85. }
  86.  
  87. int arr[9];
  88. for (int i = 0; i < 9; i++)
  89. arr[i] = 0;
  90.  
  91. fseek(file, 0, SEEK_SET);
  92. for (int i = 0; i < 19; i++)
  93. {
  94. fread(mas[i], 1, 7, file);
  95. fseek(file, 2, SEEK_CUR);
  96. arr[Translate(mas[i])] += 1;
  97. }
  98.  
  99. for (int i = 0; i < 9; i++)
  100. matr[i].resize(arr[i]);
  101. int i = 0, k = 0;
  102. while (i < 19)
  103. {
  104. int count = 0;
  105.  
  106. while (Translate(mas[i]) == k)
  107. {
  108. mas[i] += 2;
  109. matr[k][count].first = Translate(mas[i]);
  110. mas[i] += 2;
  111. matr[k][count].second = Translate(mas[i]);
  112. count++;
  113. i++;
  114. if (i == 19)
  115. break;
  116. }
  117. k++;
  118. }
  119.  
  120. /*
  121. for (int i = 0; i < 19; i++)
  122. {
  123. int k = Translate(mas[i]);
  124. mas[i] += 2;
  125. matr[k][arr[k]].first = Translate(mas[i]);
  126. mas[i] += 2;
  127. matr[k][arr[k]].second = Translate(mas[i]);
  128. arr[k] += 1;
  129. }*/
  130.  
  131. vector<int> d(n, INF), p(n);
  132. d[start] = 0;
  133. vector<bool> u(n);
  134.  
  135. for (int i = 0; i < n; i++)
  136. {
  137. int v = -1;
  138. for (int j = 0; j < n; j++)
  139. if (!u[j] && (v == -1 || d[j] < d[v]))
  140. v = j;
  141. if (d[v] == INF)
  142. break;
  143. u[v] = true;
  144.  
  145. for (int j = 0; j < matr[v].size(); j++)
  146. {
  147. int to = matr[v][j].first;
  148. int len = matr[v][j].second;
  149. if (d[v] + len < d[to])
  150. {
  151. d[to] = d[v] + len;
  152. p[to] = v;
  153. }
  154. }
  155. }
  156.  
  157. cout << "Путь: ";
  158. out(p, start, end);
  159.  
  160. cout << endl << "Длина пути: " << d[end] << endl;
  161.  
  162. system("pause");
  163. return 0;
  164. }
Add Comment
Please, Sign In to add comment