diff --git a/src/main/MazeMain.java b/src/main/MazeMain.java index ee0b28e..3ec42c6 100644 --- a/src/main/MazeMain.java +++ b/src/main/MazeMain.java @@ -12,15 +12,23 @@ // Grid grid = new Grid(10, 10); // BinaryTree maze = new BinaryTree(grid); + DistanceGrid grid = new DistanceGrid(10, 10); Sidewinder maze = new Sidewinder(grid); - Cell root = grid.getCellAt(0, 4); - grid.setDistances(root.calculateDistances()); + Cell root = grid.getCellAt(0, 0); + Distances distances = root.calculateDistances(); + grid.setDistances(distances); grid.hideDistanceValues(); 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))); + 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 95eadd7..3061ee9 100644 --- a/src/main/net/curtlewis/maze/distance/Distances.java +++ b/src/main/net/curtlewis/maze/distance/Distances.java @@ -17,14 +17,6 @@ cells.put(root, 0); } - // public int distanceFrom(Cell cell) { - // if (cells.containsKey(cell)) { - // return cells.get(cell); - // } else { - // return -1; - // } - // } - public void setDistanceTo(Cell cell, int dist) { cells.put(cell, dist); } @@ -37,5 +29,29 @@ return cells.containsKey(cell) ? cells.get(cell) : 0; } + public Distances pathTo(Cell goal) { + Cell current = goal; + + Distances breadcrumbs = new Distances(root); + + if (cells.containsKey(current)) { + breadcrumbs.setDistanceTo(current, cells.get(current)); + } else { + breadcrumbs.setDistanceTo(current, 0); + } + + while (current != root) { + for(var i = 0; i < current.getLinks().size(); i++) { + Cell neighbor = current.getLinks().get(i); + if (cells.containsKey(neighbor) && cells.get(neighbor) < cells.get(current)) { + breadcrumbs.setDistanceTo(neighbor, cells.get(neighbor)); + current = neighbor; + break; + } + } + } + + return breadcrumbs; + } }