2017-01-12 14 views
0

ノードからルートへのクリック時にすべてのノードとパスを強調表示しようとしています。Cytoscapeの指定されたデータとしてツリー内の実際のパスをハイライト表示

このリンクの一部の例が見つかりました。How to highlight the path between two nodes in CYTOSCAPE JS

上記リンクのコードは、Dijkstraのアルゴリズムを使用して最短経路を見つけます。しかし、データに示されているように、私は実際のパスを取る必要があります。

は、例えば、以下のデータを考慮してください。ソースは、ターゲットがFである場合、リンクのコードを使用して

nodes: [ 
    { data: { id: 'a' } }, 
    { data: { id: 'b' } }, 
    { data: { id: 'c' } }, 
    { data: { id: 'd' } }, 
    { data: { id: 'e' } }, 
    { data: { id: 'f' } }, 
    { data: { id: 'g' } } 
    ], 

edges: [ 
    { data: { id: 'ab', weight: 1, source: 'a', target: 'b' } }, 
    { data: { id: 'ac', weight: 2, source: 'a', target: 'c' } }, 
    { data: { id: 'bd', weight: 3, source: 'b', target: 'd' } }, 
    { data: { id: 'be', weight: 4, source: 'b', target: 'e' } }, 
    { data: { id: 'cg1', weight: 5, source: 'c', target: 'g' } }, 
    { data: { id: 'gc1', weight: 6, source: 'g', target: 'c' } }, 
    { data: { id: 'cg2', weight: 7, source: 'c', target: 'g' } }, 
    { data: { id: 'gf', weight: 8, source: 'g', target: 'f' } } 
    ] 

を、木のハイライトは次のように動作します。

Tree Highlight with Dijkstra's Algorithm

誰でもデータに与えられたとして、私はパスをトレースし、強調表示することができた場合、それは非常に参考になります。

+0

Dijkstraのパスは、 'a'から' f'までのパスです。あなたの質問を明確にしてください。あなたが望むものははっきりしない。サンプルデータがあるので、そのデータセットの出力として期待するものを示してください。 – maxkfranz

答えて

0

A *メソッドを使用して最短パスを印刷できました。ダイクストラ法のためにそれを変更すると、私はおそらく例えばFFGを実装します:

var dijkstra = cy.elements().dijkstra('#e', function(){ 
    return this.data('weight'); 
}); 

var pathToJ = dijkstra.pathTo(cy.$('#j')); 

       for (i = 0,j=0; i < pathToJ.nodes().size(),j<pathToJ.edges().size(); i++,j++) { 
        console.log('Nodes Size - '+ pathToJ.nodes().size()); 
        console.log('Edges Size - '+ pathToJ.edges().size()); 
        console.log('Node - \t' + pathToJ.nodes()[i].data('id')); 
        console.log('edge - \t' + pathToJ.edges()[j].data('id')); 
       } 

pathTo(node)は、ノードへのソースノードからの最短経路を含むコレクションを返します。

重み関数が定義されていない場合は、各エッジに一定の重み1が使用されます。

関連する問題