2011-06-14 9 views
2

私は現在、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を使用してリンクの方向を検討します。

敬具

答えて

0

何を記述しているように見えることDefaultALGeneratorがどのように動作するかをと完全に一致していないようですので、あなたはおそらく、いくつかのコード、そしてあなたが何をしようとしての明確な説明を掲示する必要があります。しかし、それにかかわらず、SimpleALGeneratorはあなたがしようとしているものに適しているかもしれません - あなたはそれを試しましたか?

+0

私の問題に対する解決策は、有向リンクの世話をするSimpleALGeneratorでしょうか? –

+0

これは、すべてのノードの宛先のリストを返すだけなので、問題の説明を正しく理解すればそうだと思います。 – jkraybill

関連する問題