0

我正在尝试突出显示从节点到根的单击所有节点和路径。

我在此链接中找到了一个部分示例 -如何突出显示 CYTOSCAPE JS 中两个节点之间的路径

上面链接中的代码使用 Dijkstra 算法来找到最短路径。但我需要数据中给出的实际路径。

例如,考虑以下数据:

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' } }
  ]

使用链接中的代码,如果源是 a,目标是 f,则树高亮的工作方式如下。

使用 Dijkstra 算法突出显示树

如果有人可以帮助我跟踪并突出显示数据中给出的路径,那将非常有帮助。

4

1 回答 1

0

我能够使用 A* 方法打印出最短路径。为 Dijkstra 的算法改变它我可能会例如实现 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。

于 2017-01-24T12:49:32.283 回答