Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.94 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. typedef struct _cvor_liste
  5. {
  6.    int broj; /* indeks suseda */
  7.    struct _cvor_liste* sledeci;
  8. } cvor_liste;
  9.  
  10. #define MAX_BROJ_CVOROVA 100
  11. cvor_liste* graf[MAX_BROJ_CVOROVA]; /* Graf predstavlja niz pokazivaca na pocetke listi suseda */
  12.  
  13. /* Ubacivanje na pocetak liste */
  14. cvor_liste* ubaci_u_listu (cvor_liste* lista, int broj)
  15. {
  16.   cvor_liste* novi=malloc (sizeof(cvor_liste));
  17.   if (novi == NULL){
  18.     fprintf (stderr, "Neuspela alokacija.\n");
  19.     exit (EXIT_FAILURE);
  20.   }
  21.   novi->broj=broj;
  22.   novi->sledeci=lista;
  23.   return novi;
  24. }
  25.  
  26. void obrisi_listu(cvor_liste* lista)
  27. {
  28.   if (lista)
  29.   {
  30.     obrisi_listu(lista->sledeci);
  31.     free(lista);
  32.   }
  33. }
  34.  
  35. void ispisi_listu(cvor_liste* lista)
  36. {
  37.   if (lista) { printf("%d ",lista->broj);
  38.   ispisi_listu(lista->sledeci); }
  39. }
  40.  
  41.  
  42. /* Rekurzivna implementacija DFS algoritma */
  43. void DFS(int i, int posecen[])
  44. {
  45.   cvor_liste* sused;
  46.   printf("Posecujem cvor %d\n",i);
  47.   posecen[i]=1;
  48.  
  49.   for(sused=graf[i]; sused!=NULL; sused=sused->sledeci)
  50.     if (!posecen[sused->broj])
  51.       DFS(sused->broj, posecen);
  52. }
  53.  
  54. int main()
  55. {
  56.   int i, j, br_suseda, sused, broj_cvorova;
  57.   int posecen[MAX_BROJ_CVOROVA];
  58.  
  59.   printf ("Unesi broj cvorova grafa : ");
  60.   scanf("%d",&broj_cvorova);
  61.  
  62.   for (i=0; i<broj_cvorova; i++)
  63.     posecen[i] = 0;
  64.  
  65.   for (i=0; i<broj_cvorova; i++)
  66.   {
  67.     graf[i]=NULL;
  68.     printf ("Koliko cvor %d ima suseda : ",i);
  69.     scanf("%d",&br_suseda);
  70.  
  71.     for (j=0; j<br_suseda; j++)
  72.     {
  73.       do
  74.       {
  75.         printf ("Unesi broj %d. suseda cvora %d : ",j+1,i);
  76.         scanf("%d",&sused);
  77.       }
  78.       while (sused<0 || sused>=broj_cvorova); // u petlji je dok se ne unese ispravan sused
  79.  
  80.       graf[i]=ubaci_u_listu (graf[i],sused);
  81.     }
  82.   }
  83.   printf ("\n");
  84.   for (i=0; i<broj_cvorova; i++)
  85.   {
  86.     printf("%d - ",i);
  87.     ispisi_listu(graf[i]);
  88.     printf("\n");
  89.   }
  90.   DFS(0, posecen);
  91.   return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement