final SearchProblem problem = GraphSearchProblem.startingFrom(from).in(graph).extractCostFromEdges(new Function<DataTransformer, Double>() { @Override public Double apply(final DataTransformer transformer) {
return new CostType<E>(tf);
public <E> CostType<E> in(final HipsterGraph<V, E> graph) { TransitionFunction<E, V> tf; if (graph instanceof HipsterDirectedGraph) { final HipsterDirectedGraph<V, E> dg = (HipsterDirectedGraph<V, E>) graph; tf = new TransitionFunction<E, V>() { @Override public Iterable<Transition<E, V>> transitionsFrom(final V state) { ArrayList<Transition<E, V>> transitions = new ArrayList<Transition<E, V>>(); for(GraphEdge<V, E> edge : dg.outgoingEdgesOf(state)){ transitions.add(Transition.create(state, edge.getEdgeValue(), edge.getVertex2())); } return transitions; } }; } else { tf = new TransitionFunction<E, V>() { @Override public Iterable<Transition<E, V>> transitionsFrom(final V state) { ArrayList<Transition<E, V>> transitions = new ArrayList<Transition<E, V>>(); for(GraphEdge<V, E> edge : graph.edgesOf(state)){ V oppositeVertex = edge.getVertex1().equals(state) ? edge.getVertex2() : edge.getVertex1(); transitions.add(Transition.create(state, edge.getEdgeValue(), oppositeVertex)); } return transitions; } }; } return new CostType<E>(tf); }
public <E> CostType<E> in(final HipsterGraph<V, E> graph) { TransitionFunction<E, V> tf; if (graph instanceof HipsterDirectedGraph) { final HipsterDirectedGraph<V, E> dg = (HipsterDirectedGraph<V, E>) graph; tf = new TransitionFunction<E, V>() { @Override public Iterable<Transition<E, V>> transitionsFrom(final V state) { ArrayList<Transition<E, V>> transitions = new ArrayList<Transition<E, V>>(); for(GraphEdge<V, E> edge : dg.outgoingEdgesOf(state)){ transitions.add(Transition.create(state, edge.getEdgeValue(), edge.getVertex2())); } return transitions; } }; } else { tf = new TransitionFunction<E, V>() { @Override public Iterable<Transition<E, V>> transitionsFrom(final V state) { ArrayList<Transition<E, V>> transitions = new ArrayList<Transition<E, V>>(); for(GraphEdge<V, E> edge : graph.edgesOf(state)){ V oppositeVertex = edge.getVertex1().equals(state) ? edge.getVertex2() : edge.getVertex1(); transitions.add(Transition.create(state, edge.getEdgeValue(), oppositeVertex)); } return transitions; } }; } return new CostType<E>(tf); }
.startingFrom("A") .in(graph) .takeCostsFromEdges() .build();