Dado um gráfico de N vértices e a distância entre as arestas dos vértices armazenados na tupla T1 = (d11, d12, …, d1n) to Tn = (dn1, dn2, …, dnn)
. Descubra uma árvore de abrangência mínima deste gráfico começando no vértice V1. Além disso, imprima a distância total necessária para percorrer essa árvore gerada.
Example:
For N =5
T1 = (0, 4, 5, 7, 5)
T2 = (4, 0, 6, 2, 5)
T3 = (5, 6, 0, 2, 1)
T4 = (7, 2, 2, 0, 5)
T5 = (5, 5, 1, 5, 0)
Selection of edges according to minimum distance are:
V1 -> V2 = 4
V2 -> V4 = 2
V4 -> V3 = 2
V3 -> V5 = 1
Thus, MST is V1 -> V2 -> V4 -> V3 -> V5 and the distance travelled is 9 (4+2+2+1)
Literalmente, não tenho idéia de como criar um gráfico de n vértices em R.
Pesquisei no google, mas não entendi como abordar o problema acima.
Por favor me ajude.
r
minimum-spanning-tree
Magie
fonte
fonte
igraph
pacote , esta pergunta ou esta função ?mst(g)
mas talvez tambémmst(g, weights = E(g)$weights)
?sum(E(mg)$weight)
, ondemg
é o gráfico mínimo da árvore de abrangênciaRespostas:
Sua pergunta parece não corresponder ao título - você está atrás da criação do gráfico e não do MST? Depois de obter um gráfico, como diz @ user20650, o próprio MST é fácil.
É fácil criar um gráfico de tamanho n , mas há muita complexidade sobre quais nós estão conectados e seus pesos (distâncias) dos quais você não nos fala, então essa é uma ilustração realmente básica.
Se assumirmos que todos os nós estão conectados a todos os outros nós (gráfico completo), podemos usar
make_full_graph
. Se esse não for o caso, você precisa de dados para dizer quais nós estão conectados ou usar um gráfico aleatório.A próxima edição são as distâncias. Você não nos forneceu nenhuma informação sobre como essas distâncias são distribuídas, mas podemos demonstrar atribuí-las ao gráfico. Aqui, usarei apenas números uniformes aleatórios [0-1]:
O próximo bit é apenas o próprio MST, usando
minimum.spanning.tree
:A saída
mst
é assim:fonte
user20650
me ajudou. É suficiente.