Advertisement
Guest User

Untitled

a guest
May 29th, 2015
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.21 KB | None | 0 0
  1. int DigraphTransitiveClosure (PtDigraph pdig)
  2. {
  3.  
  4.     if (pdig == NULL)
  5.         return NO_DIGRAPH;
  6.    
  7.     if (!pdig->NVertexes)
  8.         return DIGRAPH_EMPTY;
  9.  
  10.     if((pvertlist = (unsigned int*) malloc(pdig->NVertexes * sizeof(unsigned int))) == NULL)
  11.         return NO_MEM;
  12.  
  13.     if ((pvertcost = (int *) malloc (pdig->NVertexes * sizeof(int))) == NULL)
  14.         return NO_MEM;
  15.  
  16.     if ((pvertpred = (unsigned int *) malloc (pdig->NVertexes * sizeof(unsigned int))) == NULL)
  17.         return NO_MEM;
  18.  
  19.     PtBiNode node;
  20.     unsigned int I, *pvertlist, *pvertpred, *pvertcost;
  21.  
  22.     for(node = pdig->Head; node != NULL; node = node->PtNext) {
  23.         Reach (pdig, node->Number, pvertlist);
  24.         DijkstraPQueue(pdig, node->Number, pvertpred, pvertcost);
  25.         if((pvertlist[0] != 0){         /* se houver vertices alcancaveis por pv */
  26.             for(I = 1; I < pvertlist[0]; I++) {
  27.                 if(!InPosition(node->Number, pvertlist[I]) {                /* se a aresta para I+1 nao existir */
  28.                     InEdge(pdig, node->Number, pvertlist[I], pvertcost[I]); /* insere aresta de number para I */
  29.                 }
  30.             }
  31.         }
  32.     }
  33.  
  34.     free(pvertlist);
  35.     free(pvertcost);
  36.     free(pvertpred);
  37.  
  38.     pvertlist = NULL; /* o adrego fala disto no livro, programaçao defensiva xD */
  39.     pvertcost = NULL;
  40.     pvertpred = NULL;
  41.  
  42.     return OK;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement