2013-04-02 2 views
0

네트워크의 너비 우선 탐색을 위해 R과 협력 중입니다. 지금까지 가지고있는 코드는 다음과 같습니다.R에서 BFS를 사용하여 최단 경로 계산

shortestPath <- function(v1,v2) { 
    q <- rep(0, 3931) 
    head <- 1 
    head2 <- 0 
    tail <- 1 
    v1$distance <- 0 
    q[tail] <- v1 
    while(head <= tail) { 
    v <- q[head] 
    head <- head + 1 
    if(v==v2) { 
     return(v$distance) 
     } 
    vEdges <- get.neighborhood(net, v) 
    m <- rep(0,3931) 
    m[head2] <- v 
    head2 <- head2 + 1 
    for(n in vEdges) { 
    if(!(n %in% m)) { 
     n$distance <- v$distance + 1 
     m[head2] <- n 
     head2 <- head2 + 1 
     tail <- tail + 1 
     q[tail] <- n 
     } 
    } 
    } 
} 

나는 그걸 어떻게 처리하고 있는지 잘 모르겠습니다. while 루프에서 무한정 멈춰 버립니다. 내가 다루고있는 네트워크가 완전히 연결되어 있습니다. 나는 누군가가 이것을 고치기 위해 올바른 방향으로 놓을 수 있다면, 내가 볼 수없는 사소한 문제가 있다고 생각한다. 그것은 좋을 것이다. 아마 전형적인 R 사용자만큼 경험이 없을 것입니다.

감사합니다.

+0

코드를 들여 쓰기하면 어떤 코드 블록이 단위를 형성하는지 쉽게 알 수 있습니다. 코드를 들여 쓰는 방법에 대한 편집을 참조하십시오. –

+3

igraph : http://igraph.sourceforge.net/doc/R/graph.bfs.html을 확인하십시오. 어떤 종류의 알고리즘 접근법에서도 R에서 바퀴를 재발 명할 필요는 거의 없습니다. – tcash21

답변

0

그래프의 끝에서 head <= tail이 항상 TRUE이기 때문에 while 루프가 무한 루프를 반복한다고 생각합니다. head == tail? 나는 head < tail이 무슨 뜻인지 의심해? 또한, 나는 return이 while 루프에서 깨지면 break을 사용한다고 생각하지 않습니다.

+0

편집과 답장 모두에 감사드립니다. 실제로'head user1547050