Advertisement
Guest User

Untitled

a guest
Nov 12th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. // Lab 4.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. using namespace std;
  7. #define n 11
  8. #define size 7
  9. struct graph
  10. {
  11. int edge[n][2] = { {1,2 },{ 1,3 },{ 1,4 },{ 2,4 },{ 3,4 },{ 3,6 },{ 3,7 },{ 4,5 },{ 4,6 },{ 5,7 },{ 6,7 } };
  12. int w[n] = { 5,4,6,3,3,5,9,5,4,3,6 };
  13. int arr[size][size];
  14. bool v[size];
  15. int d[size];//расстояние между ребрами
  16. };
  17. void show_matrix(graph obj);
  18. void Dijkstra(graph &obj);
  19. int main()
  20. {
  21. graph a;
  22. for (int i = 0; i < size; i++)
  23. {
  24. for (int j = 0; j < size; j++)
  25. {
  26. a.arr[i][j] = 0;
  27. }
  28. }
  29. for (int i = 0; i < size; i++)
  30. {
  31. for (int j = 0; j < size; j++)
  32. {
  33. for (int k = 0; k < n; k++)
  34. {
  35. if (a.edge[k][0] == i + 1 && a.edge[k][1] == j + 1)
  36. {
  37. a.arr[i][j] = a.w[k];
  38. a.arr[j][i] = a.w[k];
  39. }
  40. }
  41. }
  42. }
  43. show_matrix(a);
  44. for (int i = 0; i < size; i++)
  45. {
  46. a.d[i] = 999;
  47. a.v[i] = true;
  48. }
  49. a.d[0] = 0;
  50. Dijkstra(a);
  51. system("pause");
  52. return 0;
  53. }
  54. void show_matrix(graph obj)
  55. {
  56. cout << " ";
  57. for (int i = 0; i < size; i++)
  58. cout << " " << i + 1;
  59. cout << endl;
  60. for (int i = 0; i < size; i++)
  61. {
  62. cout << i + 1 << " ";
  63. for (int j = 0; j < size; j++)
  64. {
  65. cout << obj.arr[i][j] << " ";
  66. }
  67. cout << endl;
  68. }
  69. }
  70. void Dijkstra(graph &obj)
  71. {
  72. int min_index, min, tmp;
  73. do
  74. {
  75. min_index = 999, min = 999;
  76. for (int i = 0; i < size; i++)
  77. {
  78. if (obj.v[i] == 1 && (obj.d[i] < min))
  79. {
  80. min = obj.d[i];
  81. min_index = i;
  82. }
  83. }
  84. if (min_index != 999)
  85. {
  86. for (int i = 0; i < size; i++)
  87. {
  88. if (obj.arr[min_index][i] > 0)
  89. {
  90. tmp = min + obj.arr[min_index][i];
  91. if (tmp < obj.d[i])
  92. obj.d[i] = tmp;
  93. }
  94. }
  95. obj.v[min_index] = false;
  96. }
  97. } while (min_index < 999);
  98. cout << "The shortest distances to the vertices:" << endl;
  99. for (int i = 0; i < size; i++)
  100. cout << obj.d[i] << " ";
  101. cout << endl;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement