2013-07-04 1 views
1

그래프가 있고 모든 노드 사이의 최단 거리가 필요합니다. 이제 I는 다음 함수R, 최단 경로 결정

shortestPath <- function(streets, length) 
{ 
    streets <- matrix(streets, byrow=TRUE, ncol=2) # from -> to 
    g <- graph.data.frame(as.data.frame(streets))  # create graph, see plot(g) 
    return <- shortest.paths(g, weights = length)  # return routes lengths 
} 
여기 streets

우리는 에지를 가지며 length들이 (분명히)는 데이터 에지의 길이를 포함하는 벡터이다했다.

다음 그래프에서 각 가장자리의 길이가 2인데, 그래프는 방향이 틀려져 있어야합니다.

Given graph

당신은 문제를 재현하는 다음과 같은 데이터를 사용할 수 있습니다.

# Data 
edges <- c(1,2, 2,3, 3,4, 4,5, 2,6, 3,7, 4,8, 6,8); 
length <- rep(2,8); 
aantalNodes <- 8; 

# Determine shortest path 
routes <- matrix(shortestPath(edges,length), byrow=FALSE, ncol=aantalNodes); 

노드 6과 노드 8 사이의 최단 경로 길이가 2임을 알 수 있습니다. 그러나이 함수는 길이 4를 반환합니다. 나는 이미 이틀 동안 그것에 대해 고민 중이다. 앞으로 당신을 도울 것입니다!

+1

제 생각에 문제는 함수의 본문에 따라'streets'라는 이름의 인수가 있고 그 인수의 이름을'edges'라고해야한다고 생각합니다. 앞으로는 최상의 결과를 추측하는 대신 실제로 질문에 답할 수 있도록 예제를 재현 할 수 있도록하십시오. – flodel

+0

나는 실제로 내 질문에 오타가 있음을 알았다. 1 시간 안에 재생산 할 수있는 데이터를 제공 할 것입니다. – Michiel

+0

그래도 문제가 있습니까? 그렇다면 '거리'와 '길이'입력을 제공하여 재현성을 높여보십시오. 또한 'length'도 함수의 이름이기 때문에 변수에 대한 이름 선택이 매우 나쁜 점에주의하십시오. – flodel

답변

1

shortestPath(edges,length)의 rownames 및 colnames를보고 싶을 수 있습니다. 그것은 정말로 오히려 계시하고 있습니다 ...

+0

+1 - 10 개 이상의 정점이있는 그래프를 처리 할 수 ​​있도록 편집했습니다. – flodel