Digamos que demos um gráfico simples e não direcionado com nós e arestas bidirecionais. Para e , queremos verificar se no gráfico existe apenas um caminho simples entre eles.
O que eu estava pensando era que deveríamos encontrar todos os ciclos no gráfico e executar bfs de a , se o caminho não se mover pelos vértices que estão em algum ciclo, haverá apenas um caminho e, caso contrário, haverá são mais.
Existe alguma outra maneira de verificar isso?
algorithms
graphs
shortest-path
someone12321
fonte
fonte
Respostas:
A sugestão de Rafael de usar o caminho mais curto 2 é correta, mas mais complexa do que o necessário.
Sua abordagem é inviável, o número de ciclos é fatorial no tamanho da entrada.
Aqui está um esboço de uma solução no tempoO ( | V| + | E| ) .
Encontre um caminhop1 1, …pn de x para y no O ( | V| + | E| ) . Se esse caminho não existir, respondaNÃO . Caso contrário, marque todos os nós no caminho. Esse caminho é realmente único se, e somente se, nenhum nó nesse caminho atingir um nó que vem depois dele. A partir do primeiro nó do caminhop1 1 , escolha uma borda aleatória saindo de p1 1 diferente daquele que o conecta p2 e inicie um DFS a partir daí. Se você alcançar um nó marcado, respondaNÃO , se você nunca alcançar um nó marcado, recorte esse ramo do gráfico e escolha outra aresta de saída aleatória. Continue de maneira semelhante até que todas as bordas de saída estejam esgotadas e comece novamente com o seguinte nó até chegarpn . Se você concluir o procedimento sem nunca responderNÃO , responda SIM . Todo o procedimento tem o custo de um DFS,O ( | V| + | E| ) , portanto, o tempo total é O ( | V| + | E| ) .
fonte
Execute um algoritmo de caminho k-menor comk = 2 e observe se falha.
fonte
Se existir um caminho da origemx para algum ciclo, nem sempre contradiz a existência de um único caminho simples. Veja o seguinte exemplo:
Aqui existe um ciclo que pode ser alcançado a partir dex e y . Este problema pode ser resolvido emO ( | V| + | E| ) .
Você pode executar o BFS para encontrar a menor distânciax para cada vértice no gráfico e o mesmo de y . Um nó pertence ao caminho mais curto dex para y se e apenas se
fonte
Realize uma pesquisa profunda a partir dex e anote as arestas de acordo com a arvore, a traseira ou a cruz (veja, por exemplo, aqui ).
Há mais de um caminho simples dex para y se e somente se houver (pelo menos) um nó no caminho de x para y usando apenas arestas de árvore (ou seja, o caminho encontrado pelo DFS) que é incidente em uma aresta traseira ou transversal.
fonte