Pesquise em profundidade. DFS


DFS DFS
A pesquisa em profundidade (DFS) é um dos principais algoritmos em gráficos. O algoritmo é executado em O(N + M).
 
Algoritmo
Para começar, começamos do topo, consideramos os filhos deste topo e, se nunca os inserimos, iniciamos o DFS a partir deles.


DFS DFS
A pesquisa em profundidade (DFS) é um dos principais algoritmos em gráficos. O algoritmo é executado em O(N + M).
 
Algoritmo
Para começar, começamos do topo, consideramos os filhos deste topo e, se nunca os inserimos, iniciamos o DFS a partir deles.


Gráfico bipartido
 
Gráfico bipartido - um gráfico cujos vértices podem ser divididos em dois conjuntos de modo que cada aresta conecte o vértices de diferentes conjuntos.


Freqüentemente, no contexto de grafos bipartidos, o conceito de cores vértices é usado. A divisão de um grafo em duas partes é chamada colorir seus vértices com duas cores diferentes. Cada aresta deve conectar vértices de uma cor diferente.

DFS
 

Algoritmo

Começamos a pintar a partir de um vértice arbitrário, que pintamos com uma cor arbitrária.
Ao passar por cada aresta, pinte o próximo vértice na cor oposta.
Se, ao iterar sobre os vértices vizinhos, encontrarmos um vértice já pintado da mesma cor do atual, então há um ciclo ímpar no grafo, o que significa que ele não é bipartido.

O algoritmo pode ser descrito da seguinte forma:
Dado um grafo direcionado com n vértices e m arestas. É necessário renumerar seus vértices de forma que cada aresta conduza de um vértice com um número menor para um vértice com um número maior.
Em outras palavras, é necessário encontrar uma permutação de vértices (ordem topológica) correspondente à ordem dada por todas as arestas do grafo.
Usaremos a pesquisa em profundidade (dfs(v))
Se adicionarmos nosso vértice ao início de uma lista no momento da saída de \(dfs(v)\) , então no final nesta lista você obtém uma classificação topológica.
Assim, a ordenação topológica desejada — isso é classificado em ordem decrescente de horários de saída.