Em uma primeira árvore de profundidade, existem as arestas que definem a árvore (ou seja, as arestas que foram usadas no percurso).
Existem algumas arestas restantes conectando alguns dos outros nós. Qual é a diferença entre uma aresta cruzada e uma aresta dianteira?
Da wikipedia:
Com base nessa árvore de abrangência, as arestas do gráfico original podem ser divididas em três classes: arestas dianteiras, que apontam de um nó da árvore para um de seus descendentes, arestas traseiras, que apontam de um nó para um de seus ancestrais, e bordas cruzadas, que não o fazem. Às vezes, as arestas das árvores, que pertencem à própria árvore de abrangência, são classificadas separadamente das arestas dianteiras. Se o gráfico original não for direcionado, todas as arestas serão arestas ou arestas traseiras.
Uma aresta que não é usada na travessia que aponta de um nó para outro estabelece um relacionamento pai-filho?
fonte
Respostas:
A Wikipedia tem a resposta:
Todos os tipos de arestas aparecem nesta imagem. Rastreie o DFS neste gráfico (os nós são explorados em ordem numérica) e veja onde sua intuição falha.
Isso explicará o diagrama: -
Borda dianteira: (u, v), em que v é um descendente de u, mas não uma borda de árvore. É uma borda que não é uma árvore que conecta um vértice a um descendente em uma árvore DFS.
Borda transversal: qualquer outra borda. Pode ir entre vértices na mesma árvore de profundidade primeiro ou em diferentes árvores de profundidade primeiro. (leigo)
É qualquer outra aresta no gráfico G. Ele conecta vértices em duas DFS-tree diferentes ou dois vértices na mesma DFS-tree, nenhum dos quais é o ancestral do outro.
fonte
Uma travessia DFS em um gráfico não direcionado não deixará uma aresta cruzada, pois todas as arestas que são incidentes em um vértice são exploradas.
No entanto, em um gráfico direcionado, você pode encontrar uma aresta que leva a um vértice que foi descoberto antes, de modo que esse vértice não seja um ancestral ou descendente do vértice atual. Essa aresta é chamada de aresta cruzada.
fonte
Em uma travessia do DFS, os nós são concluídos quando todos os filhos são concluídos. Se você marcar os horários de descoberta e término de cada nó durante a travessia, poderá verificar se um nó é descendente comparando os horários de início e término. De fato, qualquer passagem do DFS particionará suas bordas de acordo com a regra a seguir.
Seja d [nó] o tempo de descoberta do nó, da mesma forma que f [nó] seja o tempo de término.
Por exemplo, considere o gráfico com arestas:
A -> B
A -> C
B -> C
Deixe a ordem da visita ser representada por uma sequência de rótulos de nós, onde "ABCCBA" significa A -> B -> C (finalizado) B (finalizado) B (finalizado) A (finalizado), semelhante a ((())).
Portanto, "ACCBBA" pode ser um modelo para "(() ())".
Exemplos:
"CCABBA": Então A -> C é uma aresta cruzada, pois o CC não está dentro de A.
"ABCCBA": Então A -> C é uma aresta dianteira (descendente indireto).
"ACCBBA": Então A -> C é uma aresta de árvore (descendente direto).
Fontes:
CLRS:
https://mitpress.mit.edu/books/introduction-algorithms
Lecure Notes http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/GraphAlgor/depthSearch.htm
fonte