Advertisement
luca_mazz1

DFS/CFC

Feb 20th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.39 KB | None | 0 0
  1. //retstituisce il grafo G trasposto
  2. Graph grafoTrasposto(Graph G){
  3.     Graph T= initGraph(G->nodes_count);
  4.     for(int i=0; i<G->nodes_count; i++){
  5.         List L= G->adj[i];
  6.         while(L != NULL){
  7.             addEdge(T, L->target, i, L->peso);
  8.             L= L->next;
  9.         }
  10.     }
  11.     return T;
  12. }
  13.  
  14. //maschera per le CFC
  15. void CFC_Interface(Graph G){
  16.     if(G != NULL){
  17.         int color[G->nodes_count];
  18.         CFC(G, color);
  19.     }
  20. }
  21.  
  22. //il vero e proprio algoritmo
  23. void CFC(Graph G, int color[]){
  24.     List L= NULL;
  25.     L= DFS2(G, color);
  26.     Graph G1= grafoTrasposto(G);
  27.     DFS1(G1, L, color);
  28. }
  29.  
  30. //restituisce i vertici visitati dalla DFS
  31. List DFS2(Graph G, int color[]){
  32.     List L= NULL;
  33.     INIT(G->nodes_count, color);
  34.  
  35.     for(int i=0; i<G->nodes_count; i++){
  36.         if(color[i]==BIANCO)
  37.             DFS2_visit(G, i, color, L);
  38.     }
  39.  
  40.     return L;
  41. }
  42.  
  43. //visita in profondità il grafo G a partire dal vertice v, e a fine visita aggiunge il vertice alla lista
  44. void DFS2_visit(Graph G, int v, int color[], List L){
  45.     color[v]= GRIGIO;
  46.     List L1= G->adj[v];
  47.  
  48.     while(L1 != NULL){
  49.         if(L1->target == BIANCO)
  50.             DFS2_visit(G, L1->target, color, L);
  51.         L1= L1->next;
  52.     }
  53.  
  54.     color[v]= NERO;
  55.     L= addNodeList(L, v, 0);
  56. }
  57.  
  58. //DFS modificata la cui sorgente è la lista L
  59. void DFS1(Graph G, List L, int color[]){
  60.     INIT(G->nodes_count, color);
  61.     List tmp= L;
  62.     while(tmp != NULL){
  63.         if(color[tmp->target] == BIANCO)
  64.             DFS_visit(G, tmp->target, color);
  65.         tmp= tmp->next;
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement