Eu tenho uma árvore não direcionada cujos vértices eu quero rotular. Os nós das folhas devem ser rotulados como um. Então, assuma que as folhas foram removidas. Na árvore que resta, as folhas devem ser rotuladas como duas. Esse processo continua da maneira óbvia até que todos os vértices tenham um rótulo. A razão pela qual faço isso é que desejo armazenar os vértices em uma fila e passar por eles "sai primeiro". Existe uma maneira fácil de fazer esse tempo ?
Eu posso resolver o problema executando um BFS em cada etapa. Mas, na pior das hipóteses, em cada passo que passo em cada vértice, removo exatamente duas folhas e enfileirá-las. Eu acredito que isso leva tempo quadrático.
Outra idéia foi primeiro encontrar todas as folhas e depois fazer um BFS de cada folha. Isso não me dá a solução desejada. Por exemplo, considere um tipo de "gráfico da coroa", como na figura abaixo. A solução desejada é mostrada, mas o lançamento de um BFS de cada folha resultaria em apenas dois rótulos usados.
Idealmente, o algoritmo de tempo linear também seria fácil de explicar e implementar.
fonte
Uma resposta direta é a seguinte:
Classifique topologicamente o gráfico.
fonte