Demetra4

Dijkstra

May 17th, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.43 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 999
  5. #define NM 100
  6.  
  7. int N, M, Nod1, Nod2, cost, vizitat[NM], dist[MAX], pred[NM], graf[NM][NM];
  8.  
  9. int print_drum(int start, int spre, int pred[]){
  10.     if (start != spre){
  11.         print_drum(start, pred[spre], pred);
  12.     }
  13.     printf("%d ", spre);
  14. }
  15.  
  16. void Dijkstra(int n, int graf[NM][NM], int start_node){
  17.     for(int i = 0; i < N; i++){
  18.         dist[i] = MAX;
  19.         pred[i] = 0;
  20.     }
  21.     dist[start_node] = 0;
  22.     int nodCurent = start_node;
  23.     vizitat[nodCurent] = 1;
  24.     for(int i = 0; i < n; i++){
  25.         int min = MAX;
  26.         int urm = 0;
  27.         for(int i = 1; i < n; i++){
  28.             if(graf[nodCurent][i] != 0){
  29.                 int  d = dist[nodCurent] + graf[nodCurent][i];
  30.                 if(d < dist[i] && vizitat[i] == 0){
  31.                     dist[i] = d;
  32.                     pred[i] = nodCurent;
  33.                 }
  34.             }
  35.             if(vizitat[i] == 0 && dist[i] <= min){
  36.                 min = dist[i];
  37.                 urm = i;
  38.             }
  39.         }
  40.         nodCurent = urm;
  41.         vizitat[nodCurent] = 1;
  42.     }
  43.     print_drum(1,2,pred);
  44. }
  45.  
  46. int main(){
  47.  
  48. scanf("%d %d", &N,&M);
  49.     for (int i = 0; i < M; i++){
  50.         scanf("%d %d %d", &Nod1, &Nod2, &cost);
  51.     }
  52.     for(int i = 1; i < M; i++)
  53.         for(int j = i + 1; j < M; j++)
  54.         {
  55.             graf [i][j] = graf[j][i] = cost;
  56.         }
  57.     Dijkstra(N, graf[M][M] ,1);
  58.     return 0;
  59. }
Add Comment
Please, Sign In to add comment