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);
}
我想所有的路徑,考慮的鏈接,即開始在A和結束C.
我下令原子中的鏈接的方向,使最後的原子是鏈接指向的那個。因此我使用DefaultALGenerator來考慮鏈接的方向。
問候
我認爲我的問題的解決方案將是一個SimpleALGenerator,照顧定向鏈接,對吧? – 2011-06-15 09:03:32
它只是返回每個節點的目的地列表,所以我認爲如果我正確理解你的問題描述。 – jkraybill 2011-06-15 11:34:36