Cammini minimi

Leggiamo il grafo diretto e pesato scritto nel file graph5.gml e visualizziamolo:

g5 = read.graph(file="graph5.gml", format="gml")
coords5 = layout.fruchterman.reingold(g5)
plot(g5, layout=coords5, vertex.size=10, edge.label=E(g5)$weight) 

Troviamo le distanze dalla sorgente nodo 1 ignorando i pesi degli archi:

d = shortest.paths(g5, v=c(1), mode="out", weights=NA) 

Troviamo le distanze dalla sorgente nodo 1 sul grafo pesato:

d = shortest.paths(g5, v=c(1), mode="out") 

Troviamo i cammini minimi dalla sorgente nodo 1 sul grafo pesato (un solo cammino minimo per ogni nodo destinazione):

p = get.shortest.paths(g5, from=1, mode="out") 

Troviamo i cammini minimi dalla sorgente nodo 1 sul grafo non pesato (tutti i cammini minimi per ogni nodo destinazione):

p = get.all.shortest.paths(g5, from=1, mode="out", weights=NA) 

Coloriamo di rosso l'albero dei cammini minimi e etichettiamo i nodi con le distanze:

p = get.shortest.paths(g5, from=1, mode="out") 
d = shortest.paths(g5, v=c(1), mode="out") 
E(g5)$color = "grey"
for (i in 1:length(p)) E(g5, path=p[[i]])$color = "red"
plot(g5, layout=coords5, vertex.size=10, vertex.label=d, edge.label=E(g5)$weight)

Leggiamo il grafo indiretto e non pesato scritto nel file dolphin.gml e visualizziamolo. Il grafo č una rete sociale di 62 delfini e 159 connessioni non direzionali tra coppie di delfini. Due delfini sono associati da un arco se, nel periodo di osservazione durato dal 1994 al 2001, essi sono stati avvistati assieme pių frequentemente di quanto il caso avrebbe voluto. I delfini vivono nel fiordo di Doubtful Sound in Nuova Zelanda.

g = read.graph(file="dolphin.gml", format="gml")
coords = layout.fruchterman.reingold(g)
plot(g, layout=coords, vertex.size=5, vertex.label=NA) 

Troviamo la distanza media tra due delfini:

average.path.length(g) 

Visualizziamo l'istogramma delle distanze tra delfini:

p = path.length.hist(g) 
ph = p$res
names(ph) = 1:length(ph)
barplot(ph / sum(ph))

Calcoliamo il diametro della rete, ossia la massima distanza tra due nodi:

diameter(g)

Visualizziamo la rete con il diametro ingrandito e colorato di rosso:

d = get.diameter(g)
E(g)$color = "grey"
E(g)$width = 1
E(g, path=d)$color = "red"
E(g, path=d)$width = 3
V(g)$color  = "white"
V(g)[d]$color = "red"
plot(g, layout=coords, vertex.label = NA, vertex.size=5)