Advertisement
bruno83

Untitled

Apr 25th, 2020
383
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. /* Bruno šavor- Dijkstrin algoritam za raèunanje najkraæeg puta u stablu
  2. Kod je napisan pomoæu detaljnih uputa sa videa i stranice:
  3. https://youtu.be/ba4YGd7S-TY
  4. */
  5.  
  6. #include <limits.h>
  7. #include <stdio.h>
  8.  
  9. //definiranje broja vrhova
  10. #define V 9
  11.  
  12. /*
  13. Funkcija za pronalaženje puta s najmanjom vrijednošæu udaljenosti
  14. od skupa vrhova koji još nisu ukljuèeni u stablo najkraæih puteva
  15. */
  16. int minDistance(int dist[], bool sptSet[])
  17. {
  18. //deklariranje minimalne vrijednost
  19. int min = INT_MAX, min_index;
  20.  
  21. //provjera-ažuriranje minimalne vrijednosti
  22. for (int v = 0; v < V; v++)
  23. if (sptSet[v] == false && dist[v] <= min)
  24. min = dist[v], min_index = v;
  25.  
  26. return min_index;
  27. }
  28.  
  29. //funkcija za ispis niza udaljenosti
  30. void printSolution(int dist[])
  31. {
  32. printf("Vertex \t\t Distance from Source\n");
  33. for (int i = 0; i < V; i++)
  34. printf("%d \t\t %d\n", i, dist[i]);
  35. }
  36.  
  37. /*
  38. Funkcija koja implementira Dijkstrin algoritam najkraæeg puta
  39. za grafikon koji je definiran pomoæu matrice susjedstva
  40. */
  41. void dijkstra(int graph[V][V], int src)
  42. {
  43. int dist[V]; //polje u koje spremamo najkraæe vrijednosti od "src" do "i"
  44. bool sptSet[V]; /* bool varijabla èija se vrijednost postavlja na istinu ako se odreðeni vrh
  45. trenutno nalazi u najkraæem putu od "src" do "i" */
  46.  
  47. //postavljanje poèetnih vrijednosti svih udaljenosti na beskonaèno i vrijednosti varijable sptSet na laž
  48. for (int i = 0; i < V; i++)
  49. dist[i] = INT_MAX, sptSet[i] = false;
  50.  
  51. //udaljenost odreðenog vrha od samoga sebe je uvijek 0
  52. dist[src] = 0;
  53.  
  54. //traženje najkraæeg puta za sve vrhove
  55. for (int count = 0; count < V - 1; count++) {
  56. /*
  57. Od skupa vrhova koji još nisu obraðeni odabire se vrh s najmanjom udaljenosti
  58. "u" je uvijek jednak "src" u prvoj iteraciji.
  59. */
  60. int u = minDistance(dist, sptSet);
  61.  
  62. //odabrani vektor zatim oznaèujemo kao obraðeni
  63. sptSet[u] = true;
  64.  
  65. //zatim se ažuriraju vrijednosti udaljenosti za ostale vrhove
  66. for (int v = 0; v < V; v++)
  67. /*
  68. Ažuriraj vrijednost "dist[v]" samo ako nije u "sptSetu",
  69. postoji rub od "u" do "v", a ukupna udaljenost puta od "src" do "v" i do "u"
  70. je manja od trenutne vrijednosti "dist[v]"
  71. */
  72. if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX
  73. && dist[u] + graph[u][v] < dist[v])
  74. dist[v] = dist[u] + graph[u][v];
  75. }
  76.  
  77. //ispis izraèunatog niza udaljenosti
  78. printSolution(dist);
  79. }
  80.  
  81. //glavna funkcija programa
  82. int main()
  83. {
  84. //kao što je gore navedeno, pomoæu matrice susjednosti definiramo graf
  85. int graph[V][V] = { { 0, 4, 0, 0, 0, 0, 0, 8, 0 },
  86. { 4, 0, 8, 0, 0, 0, 0, 11, 0 },
  87. { 0, 8, 0, 7, 0, 4, 0, 0, 2 },
  88. { 0, 0, 7, 0, 9, 14, 0, 0, 0 },
  89. { 0, 0, 0, 9, 0, 10, 0, 0, 0 },
  90. { 0, 0, 4, 14, 10, 0, 2, 0, 0 },
  91. { 0, 0, 0, 0, 0, 2, 0, 1, 6 },
  92. { 8, 11, 0, 0, 0, 0, 1, 0, 7 },
  93. { 0, 0, 2, 0, 0, 0, 6, 7, 0 } };
  94.  
  95. //poziv funkcije- izvoðenje Dijkstra algoritma
  96. dijkstra(graph, 0);
  97. return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement