Numeração pre-órdem em busca de ciclos

Numeração pre-órdem em busca de ciclos

por Arthur Gabriel de Santana -
Número de respostas: 4

Olá, tenho uma dúvida sobre o seguinte código do site do professor Feofiloff:

/* A função cycleR devolve 1 quando encontra um ciclo ao percorrer G a partir do vértice v. */

int cycleR (Digraph G, Vertex v) {
 link p;
 lbl[v] = cnt++;
 for (p = G->adj[v]; p != NULL; p = p->next) {
 Vertex w = p->w;
 if (lbl[w] == -1) {
 if (cycleR(G, w) == 1) return 1;
 }
 else if (lbl[w] < lbl[v]) return 1;
 }
 return 0;
}
Essa função não pode retornar 1 no caso de haver um arco cruzado?
Em resposta à Arthur Gabriel de Santana

Re: Numeração pre-órdem em busca de ciclos

por Carlos Morais de Oliveira Filho -
Sim, essa função retorna 1 ao encontrar arcos cruzados. Simule com
0: 1 2
1:
2: 1
Que não tem ciclo mas a função retorna 1
Em resposta à Carlos Morais de Oliveira Filho

Re: Numeração pre-órdem em busca de ciclos

por Arthur Gabriel de Santana -
Puxa, dormi no ponto ao achar que tinha dormido no ponto. De fato o algoritmo quebra nessa caso, acho que vai ser necessário fazer ordenação topológica.
Em resposta à Arthur Gabriel de Santana

Re: Numeração pre-órdem em busca de ciclos

por Lucas Piva Rocha Corrêa -
Essa função devolve 1 para arcos cruzados E para arcos descendentes. Eu usei a função dos slides usados em aula, que funciona bem.