diff --git a/src/main/MazeMain.java b/src/main/MazeMain.java index 3ec42c6..8610ad1 100644 --- a/src/main/MazeMain.java +++ b/src/main/MazeMain.java @@ -13,19 +13,34 @@ // Grid grid = new Grid(10, 10); // BinaryTree maze = new BinaryTree(grid); - DistanceGrid grid = new DistanceGrid(10, 10); + DistanceGrid grid = new DistanceGrid(6, 6); Sidewinder maze = new Sidewinder(grid); Cell root = grid.getCellAt(0, 0); Distances distances = root.calculateDistances(); grid.setDistances(distances); grid.hideDistanceValues(); - System.out.println(maze.toString()); + // Uncomment to show path from root to a given cell + // System.out.println(maze.toString()); + // grid.showDistanceValues(); + // System.out.println("=========================================\n"); + // System.out.println(grid); + // System.out.println("=========================================\n"); + // grid.setDistances(distances.pathTo(grid.getCellAt(9,9))); + + // Uncomment to show a longest path + System.out.println("=========================================\n"); + System.out.println(grid); + + System.out.println("=========================================\n"); + Cell newStart = distances.generateMaximumDistance(); + Distances newDistances = newStart.calculateDistances(); + + Cell goal = newDistances.generateMaximumDistance(); + + grid.setDistances(newDistances.pathTo(goal)); grid.showDistanceValues(); - System.out.println("=========================================\n"); System.out.println(grid); - System.out.println("=========================================\n"); - grid.setDistances(distances.pathTo(grid.getCellAt(9,9))); - System.out.println(grid); + } diff --git a/src/main/net/curtlewis/maze/distance/Distances.java b/src/main/net/curtlewis/maze/distance/Distances.java index 3061ee9..06aed24 100644 --- a/src/main/net/curtlewis/maze/distance/Distances.java +++ b/src/main/net/curtlewis/maze/distance/Distances.java @@ -1,6 +1,8 @@ package net.curtlewis.maze.distance; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Set; @@ -10,6 +12,8 @@ private Cell root; private Map cells; + private Cell cellFarthestFromRoot; + private int maxDistance; public Distances(Cell root) { this.root = root; @@ -54,4 +58,22 @@ return breadcrumbs; } + public Cell generateMaximumDistance() { + maxDistance = 0; + cellFarthestFromRoot = root; + + List cellList = new ArrayList(cells.keySet()); + for(int i = 0; i < cellList.size(); i++) { + int cellDistFromRoot = cells.get(cellList.get(i)); + if (cellDistFromRoot > maxDistance) { + cellFarthestFromRoot = cellList.get(i); + maxDistance = cellDistFromRoot; + } + } + + return cellFarthestFromRoot; + } + + public int getMaximumDistance() { return maxDistance; } + public Cell getCellFarthestFromRoot() { return cellFarthestFromRoot; } }