Se existir um caminho da origem xpara 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 de x e y. Este problema pode ser resolvido emO ( | V| + | E| ).
Você pode executar o BFS para encontrar a menor distância x 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
di s t a n c e ( x , u ) + di s t a n c e ( u , y) = di s t a n c e ( x , y)
Agora, para verificar se existe um único caminho, verifique se os nós válidos no caminho mais curto a cada distância ocorrem no máximo uma vez. Ou seja, se houver pelo menos dois nós que pertencem a um caminho mais curto de
x para
y com a mesma distância para
xentão, há pelo menos dois caminhos mais curtos, caso contrário, ele é único. Você pode fazer todo o pós-processamento em
O ( | V| ).