我在这里有一个新问题。
我正在制作一个自定义算法,需要图形边缘的预先计算数据。我像这样使用AllEdgesIterator:
AllEdgesIterator it = graph.getAllEdges();
int nbEdges = it.getCount();
int count = 0;
int[] myData = new int[nbEdges];
while (it.next())
{
count++;
...
}
第一个奇怪的事情是nbEdges等于15565个边缘但是count只等于14417.它怎么可能?
第二个奇怪的事情是当我运行我的自定义A *时:我只是使用outEdgeExplorer浏览节点,但我在myData数组上的索引15569处得到一个IndexOutOfBound。我认为边缘索引包含在[0; N-1]其中N是边数,是不是真的如此?
这里可能发生什么?顺便说一下,我已禁用图形收缩层次结构。
感谢您每次都快速回答!
答案 0 :(得分:1)
第一个奇怪的是nbEdges等于15565个边缘 但是数量只等于14417.怎么可能?
这是因为“压缩”中删除了无法访问的子网,但是当前只有节点从图中删除,边缘才会断开连接并保留在标记为已删除的边 - “阵列”中。因此iter.getCount
只是一个上限,但AllEdgeIterator
在迭代时正确排除了这些未使用的边缘并具有正确的计数。但使用iter.getCount
分配自定义数据数组是正确的做法。
关于第二个问题:这可能是因为QueryGraph
引入了具有更大edgeId的新虚拟边缘iter.getCount
。根据确切的情况,有不同的解决方案,例如排除或使用原始边缘等等