Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Bruno šavor- Dijkstrin algoritam za raèunanje najkraæeg puta u stablu
- Kod je napisan pomoæu detaljnih uputa sa videa i stranice:
- https://youtu.be/ba4YGd7S-TY
- */
- #include <limits.h>
- #include <stdio.h>
- //definiranje broja vrhova
- #define V 9
- /*
- Funkcija za pronalaženje puta s najmanjom vrijednošæu udaljenosti
- od skupa vrhova koji još nisu ukljuèeni u stablo najkraæih puteva
- */
- int minDistance(int dist[], bool sptSet[])
- {
- //deklariranje minimalne vrijednost
- int min = INT_MAX, min_index;
- //provjera-ažuriranje minimalne vrijednosti
- for (int v = 0; v < V; v++)
- if (sptSet[v] == false && dist[v] <= min)
- min = dist[v], min_index = v;
- return min_index;
- }
- //funkcija za ispis niza udaljenosti
- void printSolution(int dist[])
- {
- printf("Vertex \t\t Distance from Source\n");
- for (int i = 0; i < V; i++)
- printf("%d \t\t %d\n", i, dist[i]);
- }
- /*
- Funkcija koja implementira Dijkstrin algoritam najkraæeg puta
- za grafikon koji je definiran pomoæu matrice susjedstva
- */
- void dijkstra(int graph[V][V], int src)
- {
- int dist[V]; //polje u koje spremamo najkraæe vrijednosti od "src" do "i"
- bool sptSet[V]; /* bool varijabla èija se vrijednost postavlja na istinu ako se odreðeni vrh
- trenutno nalazi u najkraæem putu od "src" do "i" */
- //postavljanje poèetnih vrijednosti svih udaljenosti na beskonaèno i vrijednosti varijable sptSet na laž
- for (int i = 0; i < V; i++)
- dist[i] = INT_MAX, sptSet[i] = false;
- //udaljenost odreðenog vrha od samoga sebe je uvijek 0
- dist[src] = 0;
- //traženje najkraæeg puta za sve vrhove
- for (int count = 0; count < V - 1; count++) {
- /*
- Od skupa vrhova koji još nisu obraðeni odabire se vrh s najmanjom udaljenosti
- "u" je uvijek jednak "src" u prvoj iteraciji.
- */
- int u = minDistance(dist, sptSet);
- //odabrani vektor zatim oznaèujemo kao obraðeni
- sptSet[u] = true;
- //zatim se ažuriraju vrijednosti udaljenosti za ostale vrhove
- for (int v = 0; v < V; v++)
- /*
- Ažuriraj vrijednost "dist[v]" samo ako nije u "sptSetu",
- postoji rub od "u" do "v", a ukupna udaljenost puta od "src" do "v" i do "u"
- je manja od trenutne vrijednosti "dist[v]"
- */
- if (!sptSet[v] && graph[u][v] && dist[u] != INT_MAX
- && dist[u] + graph[u][v] < dist[v])
- dist[v] = dist[u] + graph[u][v];
- }
- //ispis izraèunatog niza udaljenosti
- printSolution(dist);
- }
- //glavna funkcija programa
- int main()
- {
- //kao što je gore navedeno, pomoæu matrice susjednosti definiramo graf
- int graph[V][V] = { { 0, 4, 0, 0, 0, 0, 0, 8, 0 },
- { 4, 0, 8, 0, 0, 0, 0, 11, 0 },
- { 0, 8, 0, 7, 0, 4, 0, 0, 2 },
- { 0, 0, 7, 0, 9, 14, 0, 0, 0 },
- { 0, 0, 0, 9, 0, 10, 0, 0, 0 },
- { 0, 0, 4, 14, 10, 0, 2, 0, 0 },
- { 0, 0, 0, 0, 0, 2, 0, 1, 6 },
- { 8, 11, 0, 0, 0, 0, 1, 0, 7 },
- { 0, 0, 2, 0, 0, 0, 6, 7, 0 } };
- //poziv funkcije- izvoðenje Dijkstra algoritma
- dijkstra(graph, 0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement