Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.26 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3.  
  4. using namespace std;
  5.  
  6. struct Element
  7. {
  8. int key;
  9. Element* Next;
  10. Element* Previous;
  11. };
  12.  
  13. class Queue
  14. {
  15. public:
  16. int Count;
  17. Element* First;
  18. Element* Last;
  19. Queue();
  20. ~Queue();
  21. bool Add(int key);
  22. bool Empty();
  23. int Delete();
  24. };
  25.  
  26. int Min(int a, int b);
  27.  
  28. //класс Queue
  29.  
  30. Queue::Queue()
  31. {
  32. First = 0;
  33. Last = 0;
  34. Count = 0;
  35. }
  36.  
  37. Queue::~Queue()
  38. {
  39. int k;
  40. while (!Empty())
  41. k = Delete();
  42. }
  43.  
  44. bool Queue::Empty()
  45. {
  46. if (Count)
  47. return 0;
  48. return 1;
  49. }
  50.  
  51. bool Queue::Add(int key)
  52. {
  53. Element* a;
  54. a = new Element;
  55. a->key = key;
  56. a->Previous = Last;
  57. a->Next = 0;
  58. if (Last)
  59. Last->Next = a;
  60. Last = a;
  61. if (!First)
  62. First = a;
  63. Count++;
  64. return 1;
  65. }
  66.  
  67. int Queue::Delete()
  68. {
  69. if (Count)
  70. {
  71. int k = First->key;
  72. if (Count == 1)
  73. delete First;
  74. else
  75. {
  76. First = First->Next;
  77. delete First->Previous;
  78. }
  79. Count--;
  80. return k;
  81. }
  82. return 1;
  83. }
  84.  
  85. int Min(int a, int b)
  86. {
  87. if (a > b)
  88. return b;
  89. return a;
  90. }
  91.  
  92. struct Duga
  93. {
  94. int begin;
  95. int end;
  96. int length;
  97. int width;
  98. };
  99.  
  100. struct Node
  101. {
  102. int key;
  103. int length;
  104. int width;
  105. int parent;
  106. };
  107.  
  108.  
  109. int main()
  110. {
  111. ifstream in;
  112. in.open("Graf.txt");
  113. int Count, NCount;
  114. in >> NCount >> Count;
  115. Duga *mas;
  116. mas = new Duga[Count];
  117. Node *array;
  118. array = new Node[NCount];
  119. for (int j = 0; j < NCount; j++)
  120. {
  121. in >> array[j].key;
  122. array[j].length = 0;
  123. array[j].width = 0;
  124. array[j].parent = 0;
  125. }
  126. for (int i = 0; i < Count; i++)
  127. {
  128. in >> mas[i].begin >> mas[i].end >> mas[i].length >> mas[i].width;
  129. }
  130. cout << "Enter The Start Node: ";
  131. int Start, Finish;
  132. cin >> Start;
  133. cout << "Enter The Finish Node: ";
  134.  
  135.  
  136. cin >> Finish;
  137. Queue q;
  138. q.Add(Start);
  139. array[0].width = mas[1].width;
  140. while (!q.Empty())
  141. {
  142. int w = q.Delete();
  143. for (int i = 0; i < Count; i++)
  144. {
  145. if (mas[i].begin == w)
  146. {
  147. if (array[mas[i].end].length == 0)
  148. {
  149. array[mas[i].end].length = array[mas[i].begin].length + mas[i].length;
  150. if (mas[i].begin != Start)
  151. array[mas[i].end].width = Min(array[mas[i].begin].width, mas[i].width);
  152. else
  153. array[mas[i].end].width = mas[i].width;
  154. q.Add(mas[i].end);
  155. array[mas[i].end].parent = array[mas[i].begin].key;
  156. }
  157. else
  158. if (array[mas[i].end].length > array[mas[i].begin].length + mas[i].length)
  159. {
  160. array[mas[i].end].length = array[mas[i].begin].length + mas[i].length;
  161. array[mas[i].end].width = Min(array[mas[i].begin].width, mas[i].width);
  162. array[mas[i].end].parent = array[mas[i].begin].key;
  163. }
  164. else
  165. if ((array[mas[i].end].length == array[mas[i].begin].length + mas[i].length) && ((array[mas[i].begin].width > array[mas[i].end].width) || (array[mas[i].end].width == 0)))
  166. {
  167. array[mas[i].end].width = array[mas[i].begin].width;
  168. array[mas[i].end].parent = array[mas[i].begin].key;
  169. }
  170.  
  171. }
  172. }
  173. }
  174. for (int i = 0; i < NCount; i++)
  175. {
  176. if (array[i].key == Finish)
  177. cout << array[i].length << " " << array[i].width << endl;
  178. }
  179. int Current = Finish;
  180. while (Current != Start)
  181. {
  182. cout << Current << " ";
  183. Current = array[Current].parent;
  184. }
  185. cout << Current << endl;
  186. cout << "Press Any Key To Exit: ";
  187. cin >> Count;
  188. return 1;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement