Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int DigraphTransitiveClosure (PtDigraph pdig)
- {
- if (pdig == NULL)
- return NO_DIGRAPH;
- if (!pdig->NVertexes)
- return DIGRAPH_EMPTY;
- if((pvertlist = (unsigned int*) malloc(pdig->NVertexes * sizeof(unsigned int))) == NULL)
- return NO_MEM;
- if ((pvertcost = (int *) malloc (pdig->NVertexes * sizeof(int))) == NULL)
- return NO_MEM;
- if ((pvertpred = (unsigned int *) malloc (pdig->NVertexes * sizeof(unsigned int))) == NULL)
- return NO_MEM;
- PtBiNode node;
- unsigned int I, *pvertlist, *pvertpred, *pvertcost;
- for(node = pdig->Head; node != NULL; node = node->PtNext) {
- Reach (pdig, node->Number, pvertlist);
- DijkstraPQueue(pdig, node->Number, pvertpred, pvertcost);
- if((pvertlist[0] != 0){ /* se houver vertices alcancaveis por pv */
- for(I = 1; I < pvertlist[0]; I++) {
- if(!InPosition(node->Number, pvertlist[I]) { /* se a aresta para I+1 nao existir */
- InEdge(pdig, node->Number, pvertlist[I], pvertcost[I]); /* insere aresta de number para I */
- }
- }
- }
- }
- free(pvertlist);
- free(pvertcost);
- free(pvertpred);
- pvertlist = NULL; /* o adrego fala disto no livro, programaçao defensiva xD */
- pvertcost = NULL;
- pvertpred = NULL;
- return OK;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement