我目前正在使用Java SE 1.6下的HperGraphDB 1.1。
我在图表中存储了3个原子并在它们之间创建了多个链接。 当我使用DefaultALGenerator遍历图形时,超图将返回链接到我的start atom only链接的每个原子。我认为这来自DefaultALGenerator的实现,因为它标记了已经访问过的原子,因此不会再使用其他链接访问它们。
有没有办法检索2个原子之间的所有链接,或者我可以在不同的句柄下多次存储原子(或者可能是同一个原子的另一个链接)?
编辑:
public class MyAtom { ... }
public class MyLink extends HGPlainLink { ... }
// initialisation somewhere else
HyperGraph hg = ...
// Create some atoms
MyAtom a = new MyAtom();
MyAtom b = new MyAtom();
MyAtom c = new MyAtom();
// Store the atoms
HGHandle handleA = hg.add(a);
HGHandle handleB = hg.add(b);
HGHandle handleC = hg.add(c);
// Create some links with additional information
hg.add(new MyLink(handleA, handleB, "First directed link from A to B"));
hg.add(new MyLink(handleA, handleB, "Second directed link from A to B"));
hg.add(new MyLink(handleB, handleC, "First directed link from B to C"));
hg.add(new MyLink(handleB, handleC, "Second directed link from B to C"));
// Traverse the graph
// I want to get all paths starting at A and ending in C
DefaultALGenerator alGen = new DefaultALGenerator(
hg, /* The graph */
null, /* No link predicate */
null, /* No atom predicate */
true, /* Traverse preceeding */
false, /* Don't traverse succeeding */
false); /* Use normal order */
HGDepthFirstTraversal traversal = new HGDepthFirstTraversal(
handleC, alGen);
while (traversal.hasNext()) {
Pair current = traversal.next();
HGLink l = (HGLink) hg.get((HGHandle) current.getFirst());
Object atom = hg.get((HGHandle) current.getSecond());
System.out.println(l + " -> " + atom);
}
我想得到所有路径,考虑到链接的方向,从A开始,以C结束。
我命令链接中的原子,以便最后一个原子是链接指向的原子。因此,我使用DefaultALGenerator来考虑链接的方向。
祝你好运
答案 0 :(得分:0)
你可能应该发布一些代码,并更清楚地描述你正在尝试做什么,因为你似乎在描述的东西似乎与DefaultALGenerator应该如何工作完全一致。但无论如何,SimpleALGenerator可能更适合你想做的事情 - 你试过吗?