unnn

Roy Floyd

Jun 5th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <malloc.h>
  4.  
  5. void afisare(int **mat, int n) {
  6.     int i, j;
  7.  
  8.     printf("\nMatricea costurilor minime:\n");
  9.     for (i = 0; i < n; i++) {
  10.         for (j = 0; j < n; j++)
  11.             printf("d[%i][%i] = %i\t", i, j, mat[i][j]);
  12.         printf("\n");
  13.     }
  14.  
  15. }
  16.  
  17. void roy_floyd(int **w, int n, int **d, int MAX) {
  18.     int i, j, k;
  19.  
  20.     for (i = 0; i < n; i++)
  21.         for (j = 0; j < n; j++)
  22.             d[i][j] = w[i][j];
  23.     for (j = 0; j < n; j++)
  24.         for (i = 0; i < n; i++)
  25.             if (d[i][j] < MAX)
  26.                 for (k = 0; k < n; k++)
  27.                     if (d[i][k] > d[i][j] + d[j][k])
  28.                         d[i][k] = d[i][j] + d[j][k];
  29.     afisare(d, n);
  30. }
  31.  
  32. int **alocare(int m, int n) {
  33.     int **mat, i;
  34.  
  35.     mat = (int **)malloc(m*sizeof(int *));
  36.     for (i = 0; i < m; i++)
  37.         *(mat + i) = (int *)malloc(n*sizeof(int));
  38.     return mat;
  39. }
  40.  
  41. void dezalocare(int **mat, int m) {
  42.     int i;
  43.    
  44.     for (i = 0; i < m; i++)
  45.         free(*(mat + i));
  46.     free(mat);
  47. }
  48.  
  49.  
  50.  
  51. void main() {
  52.     int n, MAX = 9999, **w, **d, i, j, m, vf1, vf2, c;
  53.  
  54.     printf("Nr. varfuri: "); scanf_s("%i", &n);
  55.     printf("Nr. muchii: "); scanf_s("%i", &m);
  56.  
  57.     w = alocare(n, n);
  58.     d = alocare(n, n);
  59.  
  60.     for (i = 0; i < n; i++)
  61.         for (j = 0; j < n; j++)
  62.             if (i == j)
  63.                 w[i][j] = 0;
  64.             else
  65.                 w[i][j] = MAX;
  66.     for (i = 0; i < m; i++) {
  67.         printf("Varf initial: "); scanf_s("%i", &vf1);
  68.         printf("Varf final: "); scanf_s("%i", &vf2);
  69.         printf("Cost drum: "); scanf_s("%i", &c);
  70.  
  71.         w[vf1 - 1][vf2 - 1] = w[vf2 - 1][vf1 - 1] = c;
  72.     }
  73.    
  74.     roy_floyd(w, n, d, MAX);
  75.     dezalocare(w, n);
  76.     dezalocare(d, n);
  77.  
  78.     _getch();
  79. }
Add Comment
Please, Sign In to add comment