В настоящее время я работаю с HperGraphDB 1.1 под Java SE 1.6.
Я сохранил 3 атома на графике и создал несколько связей между ними.
Когда я пересекаю график с помощью DefaultALGenerator, гиперграф возвращает для каждого атома, связанного с моим стартовым атомом, только 1 ссылку. Я думаю, что это происходит из-за реализации DefaultALGenerator, поскольку он помечает уже посещенные атомы, поэтому они не будут посещаться снова по другой ссылке.
Есть ли способ получить все ссылки между двумя атомами или я могу сохранить атом (или, возможно, другую ссылку на один и тот же атом) несколько раз под разными ручками?
Edit:
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, чтобы рассмотреть направление ссылок.
С наилучшими пожеланиями