11package algorithm ;
22
33import java .util .HashMap ;
4- import java .util .HashSet ;
54import java .util .LinkedList ;
65import java .util .List ;
76import java .util .Objects ;
8- import java .util .stream .Stream ;
7+
8+ import static java .util .stream .Stream .iterate ;
99
1010public class DijkstrasAlgorithm <T > implements SearchAlgorithm <T > {
1111
1212 @ Override
1313 public List <T > findPath (Graph <T > graph , T source , T target ) {
1414 final var queue = new LinkedList <T >();
15- final var visited = new HashSet <T >();
1615 final var distances = new HashMap <T , Double >();
1716 final var previous = new HashMap <T , T >();
1817 queue .add (source );
@@ -23,19 +22,16 @@ public List<T> findPath(Graph<T> graph, T source, T target) {
2322 final var edges = graph .nodes ().get (prev );
2423 edges .forEach ((node , time ) -> {
2524 final var distance = distances .get (prev ) + time .doubleValue ();
26- if (!visited .contains (node )) {
27- queue .addLast (node );
28- visited .add (node );
29- }
3025 if (distance < distances .getOrDefault (node , Double .MAX_VALUE )) {
3126 previous .put (node , prev );
3227 distances .put (node , distance );
28+ queue .addLast (node );
3329 }
3430 });
3531 }
3632
3733 final var path = new LinkedList <T >();
38- Stream . iterate (target , Objects ::nonNull , previous ::get ).forEach (path ::addFirst );
34+ iterate (target , Objects ::nonNull , previous ::get ).forEach (path ::addFirst );
3935 return path ;
4036 }
4137
0 commit comments