diff --git a/README.md b/README.md index 3b2b719..3408cce 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ This project was created to test graph search algorithms. There are implementations and tests for two algorithms: -- Breadth-first search -- Dijkstra's Algorithm +- [Breadth-first search](src/main/java/algorithm/BreadthFirstSearch.java) +- [Dijkstra's Algorithm](src/main/java/algorithm/DijkstrasAlgorithm.java) ## Technical specifications diff --git a/src/main/java/Main.java b/src/main/java/Main.java index d0deee2..2b3e4c3 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,32 +1,47 @@ -import algorithm.Dijkstras; +import algorithm.BreadthFirstSearch; +import algorithm.DijkstrasAlgorithm; import algorithm.Graph; +import algorithm.SearchAlgorithm; import java.util.Map; public class Main { - public static void main(String[] args) { - System.out.println("Hello!"); - var algorithm = new Dijkstras(); - - var graph = new Graph<>(Map.of( - "A", Map.of("B", 5), - "B", Map.of("A", 7) - )); - - var route = algorithm.findPath(graph, "A", "A"); + private static final Graph complex = new Graph<>(Map.of( + "A", Map.of("B", 5, "H", 2), + "B", Map.of("A", 5, "C", 7), + "C", Map.of("B", 7, "D", 3, "G", 4), + "D", Map.of("C", 20, "E", 4), + "E", Map.of("F", 5), + "F", Map.of("G", 6), + "G", Map.of("C", 4), + "H", Map.of("G", 3) + )); + private static final SearchAlgorithm fastest = new DijkstrasAlgorithm<>(); + private static final SearchAlgorithm shortest = new BreadthFirstSearch<>(); - System.out.println(route); - System.out.println(graph.getDistance(route)); + public static void main(String[] args) { + System.out.println(complex); - route = algorithm.findPath(graph, "A", "B"); - System.out.println(route); - System.out.println(graph.getDistance(route)); + printRoute(complex, "D", "C"); - route = algorithm.findPath(graph, "B", "A"); - System.out.println(route); - System.out.println(graph.getDistance(route)); + printRoute(complex, "A", "G"); + printRoute(complex, "D", "H"); } - + private static void printRoute(final Graph graph, final String source, final String target) { + final var routeOne = shortest.findPath(graph, source, target); + final var routeTwo = fastest.findPath(graph, source, target); + final var message = """ + + Find the path from %s to %s + - the shortest take %.0f time and the path is %s + - the fastest take %.0f time and the path is %s""" + .formatted( + source, target, + graph.getDistance(routeOne), routeOne, + graph.getDistance(routeTwo), routeTwo); + + System.out.println(message); + } } diff --git a/src/main/java/algorithm/Dijkstras.java b/src/main/java/algorithm/DijkstrasAlgorithm.java similarity index 95% rename from src/main/java/algorithm/Dijkstras.java rename to src/main/java/algorithm/DijkstrasAlgorithm.java index d91727a..e092b52 100644 --- a/src/main/java/algorithm/Dijkstras.java +++ b/src/main/java/algorithm/DijkstrasAlgorithm.java @@ -7,7 +7,7 @@ import java.util.Objects; import java.util.stream.Stream; -public class Dijkstras implements SearchAlgorithm { +public class DijkstrasAlgorithm implements SearchAlgorithm { @Override public List findPath(Graph graph, T source, T target) { diff --git a/src/test/groovy/algorithm/DijkstrasSpec.groovy b/src/test/groovy/algorithm/DijkstrasAlgorithmSpec.groovy similarity index 96% rename from src/test/groovy/algorithm/DijkstrasSpec.groovy rename to src/test/groovy/algorithm/DijkstrasAlgorithmSpec.groovy index da2144e..aacc21d 100644 --- a/src/test/groovy/algorithm/DijkstrasSpec.groovy +++ b/src/test/groovy/algorithm/DijkstrasAlgorithmSpec.groovy @@ -4,9 +4,9 @@ import spock.lang.Specification import spock.lang.Subject import spock.lang.Unroll -class DijkstrasSpec extends Specification { +class DijkstrasAlgorithmSpec extends Specification { @Subject - def algorithm = new Dijkstras() + def algorithm = new DijkstrasAlgorithm() @Unroll("from #source to #target the time is #time and the path is #fastest") def 'should find a route for a simple graph'() {