use of org.neo4j.graphalgo.WeightedPath in project neo4j-mobile-android by neo4j-contrib.
the class ExperimentalAStar method findAllPaths.
public Iterable<WeightedPath> findAllPaths(Node start, final Node end) {
Predicate<Path> filter = new Predicate<Path>() {
public boolean accept(Path position) {
return position.endNode().equals(end);
}
};
final Traverser traverser = traversalDescription.order(new SelectorFactory(end)).filter(filter).traverse(start);
return new Iterable<WeightedPath>() {
public Iterator<WeightedPath> iterator() {
return new StopAfterWeightIterator(traverser.iterator(), costEvaluator);
}
};
}
use of org.neo4j.graphalgo.WeightedPath in project neo4j-mobile-android by neo4j-contrib.
the class Dijkstra method findAllPaths.
public Iterable<WeightedPath> findAllPaths(Node start, final Node end) {
Predicate<Path> filter = new Predicate<Path>() {
public boolean accept(Path position) {
return position.endNode().equals(end);
}
};
final Traverser traverser = TRAVERSAL.expand(expander).order(new SelectorFactory(costEvaluator)).filter(filter).traverse(start);
return new Iterable<WeightedPath>() {
public Iterator<WeightedPath> iterator() {
return new StopAfterWeightIterator(traverser.iterator(), costEvaluator);
}
};
}
use of org.neo4j.graphalgo.WeightedPath in project neo4j-mobile-android by neo4j-contrib.
the class StopAfterWeightIterator method fetchNextOrNull.
@Override
protected WeightedPath fetchNextOrNull() {
if (!paths.hasNext()) {
return null;
}
WeightedPath path = new WeightedPathImpl(costEvaluator, paths.next());
if (foundWeight != null && path.weight() > foundWeight) {
return null;
}
foundWeight = path.weight();
return path;
}
use of org.neo4j.graphalgo.WeightedPath in project neo4j-mobile-android by neo4j-contrib.
the class AStar method findSinglePath.
public WeightedPath findSinglePath(Node start, Node end) {
Doer doer = new Doer(start, end);
while (doer.hasNext()) {
Node node = doer.next();
GraphDatabaseService graphDb = node.getGraphDatabase();
if (node.equals(end)) {
// Hit, return path
double weight = doer.score.get(node.getId()).wayLength;
LinkedList<Relationship> rels = new LinkedList<Relationship>();
Relationship rel = graphDb.getRelationshipById(doer.cameFrom.get(node.getId()));
while (rel != null) {
rels.addFirst(rel);
node = rel.getOtherNode(node);
Long nextRelId = doer.cameFrom.get(node.getId());
rel = nextRelId == null ? null : graphDb.getRelationshipById(nextRelId);
}
Path path = toPath(start, rels);
return new WeightedPathImpl(weight, path);
}
}
return null;
}
use of org.neo4j.graphalgo.WeightedPath in project neo4j by neo4j.
the class AStar method findSinglePath.
@Override
public WeightedPath findSinglePath(Node start, Node end) {
lastMetadata = new Metadata();
AStarIterator iterator = new AStarIterator(start, end);
while (iterator.hasNext()) {
Node node = iterator.next();
GraphDatabaseService graphDb = node.getGraphDatabase();
if (node.equals(end)) {
// Hit, return path
double weight = iterator.visitData.get(node.getId()).wayLength;
final Path path;
if (start.getId() == end.getId()) {
// Nothing to iterate over
path = PathImpl.singular(start);
} else {
LinkedList<Relationship> rels = new LinkedList<Relationship>();
Relationship rel = graphDb.getRelationshipById(iterator.visitData.get(node.getId()).cameFromRelationship);
while (rel != null) {
rels.addFirst(rel);
node = rel.getOtherNode(node);
long nextRelId = iterator.visitData.get(node.getId()).cameFromRelationship;
rel = nextRelId == -1 ? null : graphDb.getRelationshipById(nextRelId);
}
path = toPath(start, rels);
}
lastMetadata.paths++;
return new WeightedPathImpl(weight, path);
}
}
return null;
}
Aggregations