unnn

DF Parcurgere

Jun 5th, 2016
60
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. int insereaza_stiva(int *stiva, int n, int vf) {
  6.     int i;
  7.  
  8.     for (i = n - 1; i >= 0; i--)
  9.         stiva[i + 1] = stiva[i];
  10.     stiva[0] = vf;
  11.     n++;
  12.    
  13.     return n;
  14. }
  15.  
  16. int sterge_stiva(int *stiva, int n) {
  17.     int i;
  18.  
  19.     for (i = 0; i < n - 1; i++)
  20.         stiva[i] = stiva[i + 1];
  21.     n--;
  22.    
  23.     return n;
  24. }
  25.  
  26. int citeste_stiva(int *stiva, int n) {
  27.     return stiva[0];
  28. }
  29.  
  30. void depth_first(int v0, int **a, int n) {
  31.     int *stiva, *m, i, nr_c, gasit, k;
  32.  
  33.     stiva = new int[n];
  34.     m = new int[n];
  35.  
  36.     for (i = 0; i < n; m[i++] = 0);
  37.     nr_c = 0;
  38.     nr_c = insereaza_stiva(stiva, nr_c, v0);
  39.     m[v0] = 1;
  40.  
  41.     printf_s("\n%i", v0 + 1);
  42.     while (nr_c) {
  43.         i = citeste_stiva(stiva, nr_c);
  44.         gasit = 0;
  45.        
  46.         for (k = 0; (k < n) && !gasit; k++)
  47.             if ((a[i][k] == 1) && (m[k] == 0)) {
  48.                 nr_c = insereaza_stiva(stiva, nr_c, k);
  49.                 m[k] = 1;
  50.                 printf_s("\n%i", k + 1);
  51.                 gasit = 1;
  52.             }
  53.         if (!gasit) nr_c = sterge_stiva(stiva, nr_c);
  54.     }
  55.     delete stiva;
  56.     delete m;
  57. }
  58.  
  59. int **alocare(int m, int n) {
  60.     int **mat, i;
  61.  
  62.     mat = (int **)malloc(n*sizeof(int *));
  63.     for (i = 0; i < n; i++)
  64.         *(mat + i) = (int *)malloc(n*sizeof(int));
  65.     return mat;
  66. }
  67.  
  68. void dezaloca(int **mat, int m) {
  69.     int i;
  70.  
  71.     for (i = 0; i < m; i++)
  72.         free(*(mat + i));
  73.     free(mat);
  74. }
  75.  
  76.  
  77. void main() {
  78.     int n, v0, **a, m, i, j, vf1, vf2;
  79.  
  80.     printf_s("Nr. varfuri: "); scanf_s("%i", &n);
  81.  
  82.     a = alocare(n, n);
  83.     for (i = 0; i < n; i++)
  84.         for (j = 0; j <= i; j++)
  85.             a[i][j] = a[j][i] = 0;
  86.     printf_s("\nNr. muchii: "); scanf_s("%i", &m);
  87.  
  88.     for (i = 0; i < m; i++) {
  89.         printf_s("Varf initial: "); scanf_s("%i", &vf1);
  90.         printf_s("Varf final: "); scanf_s("%i", &vf2);
  91.         a[vf1 - 1][vf2 - 1] = a[vf2 - 1][vf1 - 1] = 1;
  92.     }
  93.  
  94.     printf_s("Varf initial pentru DF: "); scanf_s("%i", &v0);
  95.     printf_s("Ordinea de parcurgere DF: ");
  96.     depth_first(v0 - 1, a, n);
  97.     dezaloca(a, n);
  98.     _getch();
  99. }
Add Comment
Please, Sign In to add comment