私は現在、Java SE 1.6のHperGraphDB 1.1で作業しています。hypergraphdb:2つの原子間のすべてのリンクをトラバースする方法は?
私はグラフに3つの原子を保存し、それらの間に複数のリンクを作成しました。 DefaultALGeneratorを使ってグラフをトラバースすると、ハイパーグラフはスタートアトムにリンクされている各アトムに対して1つのリンクのみを返します。私はこれが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);
}
私はリンク中の原子を命じC.
にAで開始し、終了リンクの方向を考慮すると、すべてのパスを取得したいように、最後の原子リンクが指しているものです。したがって、DefaultALGeneratorを使用してリンクの方向を検討します。
敬具
私の問題に対する解決策は、有向リンクの世話をするSimpleALGeneratorでしょうか? –
これは、すべてのノードの宛先のリストを返すだけなので、問題の説明を正しく理解すればそうだと思います。 – jkraybill