2016-03-14 51 views
0

我有興趣找到最短路徑,但僅限於一個方向。例如,我有以下圖表:the graph在一個方向上的最短路徑Neo4j中的「IN」或「OUT」

當我考慮「INCOMING」方向時,「A和D」之間的最短路徑應該是「A-C-D」。如果我認爲「離開」方向的最短路徑應該是「AFED」

基於我有,只有「BOTH」方向可以考慮實施:

PathExpander<Object> expander = Traversal.pathExpanderForAllTypes(Reldir); 
    PathFinder<Path> finder=GraphAlgoFactory.shortestPath(expander,maxDepth, 1);   
    Path path = finder.findSinglePath("A","D"); 

當我使用的Reldir =」 IN」我得到這個異常:

Java.lang.NullPointerException at org.neo4j.kernel.Traversal.pathToString(Traversal.java) 

有沒有辦法爲使用‘IN’或‘OUT’方向Neo4j的,因爲它是在OrientDB的情況下?

回答

0

我已經實施瞭解決方案。但是,我不確定這是最好的方法:

Direction Reldir = Direction.valueOf(relation_direction); 
PathExpander<Object> expander = Traversal.pathExpanderForAllTypes(Reldir); 
PathFinder<Path> finder = GraphAlgoFactory.shortestPath(expander, maxDepth,1);   
Path path = finder.findSinglePath(first_node, second_node); 
PathPrinter pathPrinter = new PathPrinter("name"); 
Traversal.pathToString(path, pathPrinter); 

static class PathPrinter implements Traversal.PathDescriptor<Path> { 
private final String nodePropertyKey; 

    public PathPrinter(String nodePropertyKey) { 
     this.nodePropertyKey = nodePropertyKey; 
    } 

    public String nodeRepresentation(Path path, Node node) 
    { 
     System.out.println(node.getProperty(nodePropertyKey, "").toString()+" "); 
    } 

任何有效的解決方案?