Alberi di supporto

Leggiamo il grafo indiretto e pesato scritto nel file graph4.gml e visualizziamolo:

g4 = read.graph(file="graph4.gml", format="gml")
coords4 = layout.fruchterman.reingold(g4)
plot(g4, layout=coords4, vertex.size=10, edge.label=E(g4)$weight) 

Verifichiamo che il grafo sia connesso:

is.connected(g4)

Calcoliamo un albero di supporto di costo minimo (l'identificazione degli archi ci servirà successivamente):

E(g4)$id = 1:ecount(g4)
mst = minimum.spanning.tree(g4, weights = E(g4)$weight)

Calcoliamo il costo dell'albero:

sum(E(mst)$weight)

Visualizziamo l'albero (notate il cambio di metodo di visualizzazione):

plot(mst, layout = layout.reingold.tilford(mst), vertex.size=10)

Coloriamo l'albero di rosso nel grafo originale:

E(g4)$color = "black"
E(g4)$width = 1
E(g4)[E(mst)$id]$color = "red"
E(g4)[E(mst)$id]$width = 3
plot(g4, layout=coords4, vertex.size=10, edge.label=E(g4)$weight)