[R-sig-Geo] shortest path
Barry Rowlingson
b.rowlingson at lancaster.ac.uk
Sat Aug 25 10:23:27 CEST 2012
On Fri, Aug 24, 2012 at 9:11 PM, Francis P. Boscoe
<fpb01 at health.state.ny.us> wrote:
>
> Hi,
>
> I've been poking around igraph and spatgraphs but have not been able to
> find a sufficiently simple example to make sense of.
>
> Suppose I have three points A, B, and C.
>
> The path from A to B is 3 units, from B to C is 4 units, and from A to C is
> 8 units.
>
> Could someone provide a simple coding example showing that A-B-C represents
> the shortest path?
using igraph, it couldn't be much simpler:
#1 make a graph, giving a two-column matrix of FROM and TO node names:
> ABC = graph.edgelist(cbind(c("A","B","A"),c("B","C","C")))
#2 attach distances as weights:
> E(ABC)$weight = c(3,4,8)
#3 see what we got:
> ABC
Vertices: 3
Edges: 3
Directed: TRUE
Edges:
[0] 'A' -> 'B'
[1] 'B' -> 'C'
[2] 'A' -> 'C'
Note this is a Directed graph. There's no way back from B to A!
#4 shortest path from A to C:
> get.shortest.paths(ABC,from="A",to="C")
[[1]]
[1] 0 1 2
And since there might be more than one shortest path, the return is a
list. Here it has one element, and the numbers are the indices of the
nodes. Starting from zero[1]. This is computer science, after all. To
get the nodes, index the V (vertices) function:
> V(ABC)[get.shortest.paths(ABC,from="A",to="C")[[1]]]
Vertex sequence:
[1] "A" "B" "C"
#5 just to check, lets set the distances to all 1 and see if the
algorithm figures out the direct route is quicker:
> E(ABC)$weight = c(1,1,1)
> V(ABC)[get.shortest.paths(ABC,from="A",to="C")[[1]]]
Vertex sequence:
[1] "A" "C"
Happy graphing!
Barry
[1] I think the zero indexing might be changing soon, or has
changed... Recent igraphs might be different, but indexing the V
function should still work.
More information about the R-sig-Geo
mailing list