Estou procurando um algoritmo que receba como entrada um vértice e encontre os caminhos mais curtos de para todos os vértices no gráfico do complemento (não direcionado). O algoritmo deve ser executado no tempo , onde é o número de arestas no gráfico original (não no gráfico do complemento).
Se for um gráfico, o gráfico de complemento é definido como o seguinte gráfico: é uma aresta no gráfico de complemento, se e somente se não for uma aresta no gráfico original. Em outras palavras, excluímos todas as arestas existentes e adicionamos todas as arestas que estavam faltando no gráfico original.
Então, primeiro, é claro, pensei em "construir" o gráfico do complemento (substituindo os vértices na lista de adjacências por aqueles que não aparecem lá), depois executando o BFS na nova lista, mas é claro que isso significaria que o tempo de execução seria baseado nas arestas do gráfico do complemento, não no original.
Também notei, é claro, que, depois de executar o BFS no gráfico original, qualquer vértice que tenha uma distância de maior que 1 (no gráfico original) deve se tornar 1 no gráfico de complemento (porque se eles não eram vizinhos no gráfico original, são vizinhos no gráfico de complemento). Mas não consegui fazer com que o algoritmo continuasse de acordo com algumas regras específicas sobre quando a distância deveria ser atualizada e o quê. Alguma sugestão?