Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.87 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4.  
  5. typedef struct nod {
  6.     int inf;
  7.     struct nod *next;
  8. }TNOD;
  9.  
  10. int ins_c(TNOD **prim, TNOD **ultim, int info)
  11. {
  12.     TNOD *p;
  13.     int ok = 1;
  14.  
  15.     if (p = (TNOD*)malloc(sizeof(TNOD)))
  16.     {
  17.         p->inf = info;
  18.         p->next = NULL;
  19.  
  20.         if (*prim == NULL)
  21.             *prim = p;
  22.         else
  23.             (*ultim)->next = p;
  24.         *ultim = p;
  25.     }
  26.     else
  27.         ok = 0;
  28.  
  29.     return ok;
  30. }
  31.  
  32. int extrage_c(TNOD **prim, TNOD **ultim, int *info)
  33. {
  34.     TNOD *p;
  35.     int ok = 1;
  36.     if (*prim)
  37.     {
  38.         p = *prim;
  39.         *info = (*prim)->inf;
  40.         (*prim) = (*prim)->next;
  41.         free(p);
  42.         if (*prim == NULL)
  43.             *ultim = NULL;
  44.     }
  45.     else
  46.         ok = 0;
  47.  
  48.     return ok;
  49. }
  50.  
  51. int **matrice_adiacenta(char *numef, int *nrv, int *nrm)
  52. {
  53.     int **a,i,j,k;
  54.     FILE *f;
  55.     fopen_s(&f, numef, "r");
  56.  
  57.     fscanf_s(f, "%d %d", nrv, nrm);
  58.  
  59.     a = (int**)malloc(*nrv * sizeof(int*));
  60.  
  61.     for (i = 0; i < *nrv; i++)
  62.         a[i] = (int*)malloc(*nrv * sizeof(int));
  63.  
  64.     for (i = 0; i < *nrv; i++)
  65.         for (j = 0; j < *nrv; j++)
  66.             a[i][j] = 0;
  67.  
  68.     for (k = 0; k < *nrm; k++)
  69.     {
  70.         fscanf_s(f, "%d %d", &i, &j);
  71.         a[i - 1][j - 1] = 1;
  72.         a[j - 1][i - 1] = 1;
  73.     }
  74.  
  75.     fclose(f);
  76.  
  77.     return a;
  78. }
  79.  
  80. void BF(int vi, int **a, int n, int **rez, int *nr)
  81. {
  82.     int i, j, *c, ok;
  83.     TNOD *p, *u;
  84.     p = u = NULL;
  85.  
  86.     c = (int*)malloc(n * sizeof(int*));
  87.     *rez = (int*)malloc(n * sizeof(int));
  88.  
  89.     for (i = 0; i < n; i++)
  90.         c[i] = 0;
  91.  
  92.     ok = ins_c(&p, &u, vi - 1);
  93.     c[vi - 1] = 1;
  94.  
  95.     *nr = 0;
  96.  
  97.     while (p)
  98.     {
  99.         ok = extrage_c(&p, &u, &i);
  100.         (*rez)[*nr] = i + 1;
  101.         (*nr)++;
  102.         for(j=0;j<n;j++)
  103.             if (a[i][j] == 1 && c[j] == 0)
  104.             {
  105.                 ok = ins_c(&p, &u, j);
  106.                 c[j] = 1;
  107.             }
  108.  
  109.  
  110.     }
  111.     free(c);
  112.  
  113. }
  114.  
  115. int main()
  116. {
  117.     int i, **a, vi, *parc, cite,n,m;
  118.  
  119.     a = matrice_adiacenta("graf.txt", &n, &m);
  120.  
  121.     BF(1, a, n, &parc, &cite);
  122.  
  123.     for (i = 0; i < cite; i++)
  124.         printf("%d ", parc[i]);
  125.  
  126.     free(parc);
  127.  
  128.     _getch();
  129.  
  130.     return 0;
  131.  
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement