2016-09-01 2 views
0

그래프가 cytoscape.js에 설정되어 있습니다. 이 노드의 일부 노드에는 데이터 필드 "feature = true"가 있습니다. 내가 선택한 노드의 경우 "feature = true"가 가장 가까운 연결된 노드를 찾고 싶습니다.cytoscape.js 데이터 필드 값이 연결된 노드 찾기

다른 알고리즘을 살펴 봤지만 여러 노드의 유효성을 검사하는 선택기를 수락하면 예상대로 최단 경로를 선택기와 일치하는 노드로 반환하지 않습니다. 예를 들어, 나는 그것의 데이터 필드의 진정한 기능이 #START에 가장 가까운 노드 = 찾고 있어요 경우 : 항상 같은 결말 노드를 선택하는 표시

var closestFeatureSearch = cytoGraph.elements().aStar({ \t \t 
 
    root: '#start', 
 
    goal: 'node[?feature]', 
 
    directed : false 
 
});

... cytoGraph.filter ('[? feature]')를 수행 한 경우 목록에있는 첫 번째 항목이 반환됩니다. 즉, "feature = true"를 가진 다른 노드가 더 가까울지라도 루트에 넣은 노드에 관계없이 반환됩니다.

내가 여기에 뭔가 분명한 것을 놓치고 있습니까? 필자는 문서를 참조했는데이 특정 문제에 대해서는 아무 것도 찾을 수 없으며 특정 노드 간 사용 사례 만 찾을 수 있습니다. 감사!

답변

0

제 생각에 A *는 목적지가 되고자하는 정확한 노드를 알고있는 경우입니다. 따라서 하나의 노드 만 목표로 허용됩니다. 크기가 1보다 큰 콜렉션을 지정하면 첫 번째 콜렉션 만 사용할 수 있습니다.

최근에 알고리즘을 살펴 보지는 않았지만, 내 직감은 변경 사항이 모든 경우에 대해 작동하지 않을 수 있다는 것입니다. 특히, 경험적으로는 특히 그렇습니다.

Djikstra를 사용하는 것이 좋습니다. 실행 후, 모든 [? 기능] 노드에서 찾은 거리를 볼 수 있습니다 - 가장 작은 것을 사용하고 경로를 가져옵니다.

0

좋아,이 기능을 처리 할 수있는 사례를 추가 할 수있었습니다. 라인 (390) 주변 않은 축소 된 최신 버전 (2.7.8)을 해제가는 것은 당신은 조건과 같이 표시되어야합니다

if(cMin.id() == target.id()){ 
 
    var rPath = reconstructPath(source.id(), target.id(), cameFrom, []); 
 
    rPath.reverse(); 
 
    return { 
 
    found: true, 
 
    distance: gScore[ cMin.id() ], 
 
    path: eles.spawn(rPath), 
 
    steps: steps 
 
    }; 
 
}

나는 여러 일치 필터에 통과 처리하기위한 별도의 케이스를 추가 항목은 즉시 다음

//if there was a filter passed in, check the array of ids matching that to see if cMin.id() is in there 
 
if (is.string(options.goal) && this.filter(options.goal).map(function(item){return item.id()}).indexOf(cMin.id()) > -1) { 
 
    var rPath = reconstructPath(source.id(), cMin.id(), cameFrom, []); 
 
    rPath.reverse(); 
 
    return { 
 
    found: true, 
 
    distance: gScore[ cMin.id() ], 
 
    path: eles.spawn(rPath), 
 
    steps: steps 
 
    }; 
 
}

두 가지 주요 변경 사항은 if 조건 (분명히)이며 rPath가 target.id() 대신 현재 cMin.id()를 대상으로 사용한다는 것입니다.

어쨌든, 그것은 나의 유스 케이스를 위해 작동합니다! 희망은 다른 사람에게 유용합니다.

관련 문제