Advertisement
razvanth21

Untitled

May 14th, 2018
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.01 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define INFINITY 9999
  4.  
  5. int v[20], m[20][20], n;
  6. char cale[64], len;
  7.  
  8. int dijkstra(int m[20][20], int start, int dest) {
  9.    
  10.     int d[20], t[20];
  11.     int i, j, k = 0, l, s = 0, f = 0;
  12.     int min, nod_min;
  13.    
  14.     start = start - 'a';
  15.     dest = dest - 'a';
  16.    
  17.     nod_min = start;
  18.     min = INFINITY;
  19.    
  20.     for (i = 0; i < n; i++) {
  21.         v[i] = 0;
  22.         d[i] = INFINITY;
  23.  
  24.         if (i == start)
  25.             d[i] = 0;
  26.     }
  27.  
  28.     for (i = 0; i < n; i++){
  29.         min = INFINITY;
  30.        
  31.         for (j = 0; j < n; j++) {
  32.             if ((d[j] < min) && v[j] == 0){
  33.                 nod_min = j;
  34.                 min = d[j];
  35.             }
  36.         }
  37.        
  38.         v[nod_min] = 1;
  39.        
  40.         for (j = 0; j < n; j++) {
  41.             f = 0;
  42.             if (m[nod_min][j] != 0) {
  43.                 if (d[j] > d[nod_min] + m[nod_min][j]) {
  44.                     d[j] = d[nod_min] + m[nod_min][j];
  45.                    
  46.                     for (l = 0; l < k; l++) {
  47.                         if (t[l] == nod_min) {
  48.                             f = 1;
  49.                             break;
  50.                         }
  51.                     }
  52.                        
  53.                     if (!f)
  54.                         t[k++] = nod_min;
  55.                 }
  56.             }
  57.         }
  58.     }
  59.    
  60.     for (i = 0; i < k; i++) {
  61.         s += d[t[i]];
  62.        
  63.         cale[len] = t[i] + 'a';
  64.         cale[len + 1] = ',';
  65.         cale[len + 2] = ' ';
  66.         cale[len + 3] = '\0';
  67.         len += 3;
  68.     }
  69.    
  70.     return s;
  71. }
  72. int main(){
  73.     FILE *f = fopen("Text.txt", "r");
  74.     int i, j;
  75.  
  76.     if (f == NULL)
  77.         exit(EXIT_FAILURE);
  78.  
  79.     fscanf(f, "%d", &n);
  80.  
  81.     for (i = 0; i < n; i++)
  82.     for (j = 0; j < n; j++)
  83.         fscanf(f, "%d", &m[i][j]);
  84.  
  85.     fclose(f);
  86.  
  87.     /*printf("Dati nodul de plecare: ");
  88.     scanf("%d", &nod);
  89.     printf("Dati nodul unde vreti sa ajungeti: ");
  90.     scanf("%d", &destinatie);*/
  91.     int c = dijkstra(m, 'a', 'c');
  92.     printf("Calea cea mai scurta este: %s si are distanta %d  :", cale, c);
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement