Advertisement
Guest User

grafovi.c

a guest
Nov 26th, 2014
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.88 KB | None | 0 0
  1. /* http://poincare.matf.bg.ac.rs/~jelenagr/ASP/cas7.html */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define MAX 10/* maksimalni broj cvorova */
  5. typedef struct _cvor {
  6.     int indeks;
  7.     struct _cvor * sl;
  8. } cvor;
  9. cvor * ubaci_na_kraj_liste(cvor *glava, int n);
  10. cvor * napravi_cvor(int n);
  11. void greska(char *s);
  12. int ucitaj_graf(cvor *graf[MAX]);
  13. void DFS(cvor *glava, int posecen[MAX]);
  14. void poseti_sve(cvor *graf[MAX], int broj_cvorova);
  15. int main()
  16. {
  17.     cvor *graf[MAX];
  18.     return 0;
  19. }
  20. void poseti_sve(cvor *graf[MAX], int broj_cvorova)
  21. {
  22.     int i;
  23.     int posecen[MAX];
  24.     for(i = 0; i < broj_cvorova; i++) {
  25.         posecen[i] = 0;
  26.     }
  27.     for(i = 0; i < broj_cvorova; i++) {
  28.         if(!posecen[i]) {
  29.             DFS(graf[i], posecen);
  30.         }
  31.            
  32.     }
  33.  
  34. }
  35. void DFS(cvor *glava, int posecen[MAX])
  36. {
  37.     posecen[glava->indeks] = 1;
  38.     printf("%d ", glava->indeks);
  39.     if(glava->sl != NULL && !posecen[glava->indeks])
  40.         DFS(glava->sl, posecen);
  41.    
  42. }
  43. int ucitaj_graf(cvor *graf[MAX])
  44. {
  45.     int broj_cvorova;
  46.     printf("Unesi broj cvorova:");
  47.     scanf("%d", &broj_cvorova);
  48.     if(broj_cvorova > MAX) {
  49.         greska("Pogresan broj cvorova!");
  50.     }
  51.     int i;
  52.     int j;
  53.     for(i = 0; i < broj_cvorova; i++) {
  54.         printf("Unesi broj suseda cvora %d:", i);
  55.         graf[i] = napravi_cvor(i);
  56.         int broj_suseda;
  57.         scanf("%d", &broj_suseda);
  58.         if(broj_suseda > MAX) {
  59.             greska("Pogresan broj suseda!");
  60.         }
  61.         printf("Unesi susede cvora %d:", i);
  62.         for(j = 0; j < broj_suseda; j++) {
  63.             int tmp;
  64.             scanf("%d", &tmp);
  65.             ubaci_na_kraj_liste(graf[i], tmp);
  66.         }
  67.     }
  68.     return broj_cvorova;
  69. }
  70. cvor * napravi_cvor(int n)
  71. {
  72.     cvor *novi = (cvor *)malloc(sizeof(cvor));
  73.     if(novi == NULL) {
  74.         greska("Alokacija memorije!");
  75.     }
  76.     novi->indeks = n;
  77.     novi->sl = NULL;
  78.     return novi;
  79. }
  80. void greska(char *s)
  81. {
  82.     printf("Greska: %s\n", s);
  83.     exit(EXIT_FAILURE);
  84. }
  85. cvor* ubaci_na_kraj_liste(cvor *glava, int n)
  86. {
  87.     if(glava == NULL)
  88.         return napravi_cvor(n);
  89.     cvor* tmp;
  90.     for(tmp = glava; tmp->sl != NULL; tmp = tmp->sl);
  91.     tmp->sl = napravi_cvor(n);
  92.     return glava;
  93. }
  94. cvor *ubaci_na_pocetak_liste(cvor *lista, int n)
  95. {
  96.     if(lista == NULL)
  97.         return napravi_cvor(n);
  98.     else {
  99.         cvor *novi = napravi_cvor(n);
  100.         novi->sl = lista;
  101.         return novi;
  102.     }
  103. }
  104. cvor *ubaci_u_sortiranu_listu(cvor *lista, int n)
  105. {
  106.     if(lista == NULL)
  107.         return napravi_cvor(n);
  108.     if(n <= lista->indeks)
  109.         return lista = ubaci_na_pocetak_liste(lista, n);
  110.     else
  111.         return lista->sl = ubaci_u_sortiranu_listu(lista->sl, n);
  112.    
  113. }
  114. void ispisi_listu(cvor *lista)
  115. {
  116.     if(lista != NULL) {
  117.         printf("%d ", lista->indeks);
  118.         ispisi_listu(lista->sl);
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement