Upload
hendrik-neumann
View
652
Download
0
Embed Size (px)
Citation preview
Fun with Mazes
Hendrik Neumann
2
https://pragprog.com/titles/jbmaze/
Standing on the shoulders of giants (one in particular)
3
What is a Maze?
4
Some more..
5
grid
cells
walls
passages
Build mazes
6
Build mazes
7
For each cell in the grid,
randomly carve either north or
east.
• strong diagonal texture
tending toward the north-
east corner of the grid.
• corridors run the length of
the northern row and the
eastern column.
Binary Tree
8
„every cell can reach every
other cell by exactly one path”
logical and mathematical purity
perfect but yet flawed
Perfect maze
9
opposite of a perfect maze
„characterized by few (if any)
dead ends, and passages
forming loops”
multiple different paths
Braid maze
10
Easy by hand for a 4x4 maze ;-)
Computer should do the work:
Dijkstra
Solve a maze
11
Measures the shortest distance
between some starting point
(which we specify), and every
other cell in the maze.
• shortest path from a chosen
endpoint to our starting point
Dijstra‘s Algorithm
0
12
Measures the shortest distance
between some starting point
(which we specify), and every
other cell in the maze.
• shortest path from a chosen
endpoint to our starting point
Dijstra‘s Algorithm
0 1
13
Measures the shortest distance
between some starting point
(which we specify), and every
other cell in the maze.
• shortest path from a chosen
endpoint to our starting point
Dijstra‘s Algorithm
0 1 2
2
14
Measures the shortest distance
between some starting point
(which we specify), and every
other cell in the maze.
• shortest path from a chosen
endpoint to our starting point
Dijstra‘s Algorithm
0 1 2 3 4
3 2 3 8 5
4 3 6 7 6
5 4 5 6 7
6 7 8 7 8
15
Measures the shortest distance
between some starting point
(which we specify), and every
other cell in the maze.
• shortest path from a chosen
endpoint to our starting point
• walk backward from end to
start.
Dijstra‘s Algorithm
0 1 2 3 4
3 2 3 8 5
4 3 6 7 6
5 4 5 6 7
6 7 8 7 8
16
Finding the longest path in a
maze
• find the longest path
between two cells
• might not be the longest
path of the maze! – but just
part of it
• run Dijstra again in the other
direction
Dijstra‘s Algorithm
17
Finding the longest path in a
maze
• find the longest path
between two cells
• might not be the longest
path of the maze! – but just
part of it
• run Dijstra again in the other
direction
Dijstra‘s Algorithm
18
Finding the longest path in a
maze
• find the longest path
between two cells
• might not be the longest
path of the maze! – but just
part of it
• run Dijstra again in the other
direction
Dijstra‘s Algorithm
19
Finding the longest path in a
maze
• find the longest path
between two cells
• might not be the longest
path of the maze! – but just
part of it
• run Dijstra again in the other
direction
Dijstra‘s Algorithm
20
Color a maze
21
coloring emphazises the maze‘s texture
Color a maze
Binary Tree Sidewinder Recursive
Backtracker
22
Texture in a maze is a result of
the bias of the algorithm.
Other signs might be long
passages or the amount of dead
ends.
Not automatically a bad thing!
Example: 2x2 grid perfect maze
four possibilities:
• Binary Tree: A, B 50%
• Sidewinder: A, B, C 75%
Bias
Random walk for unbiased algorithm
23
Aldous-Broder
Wilson‘s
Unbiased mazes
Random walk for unbiased algorithm
24
Starting at an arbitrary location
in the grid, move randomly from
cell to cell.
If moving to a previously
unvisited cell, carve a passage
to it.
End when all cells have been
visited.
Aldous-Broder
25
1. Pick a cell at random
2. Pick a random neighbour: east – not visited yet, link cells together
3. Pick next random neighbour..
Aldous-Broder
26
Aldous-Broder
4. Pick a random neighbour: west – not visited yet: link cells together
5. Pick a random neighbour: north – already visited: don‘t link cells
6. Finish the maze by randomly visiting neighbours until all are visited
27
Starts quickly but can take a
very long time to finish.
Mazes are guaranteed perfectly
random.
Unbiased – no preference to
any particular texture or feature.
Aldous-Broder
28
Random Walks…
• ..can take a long time (Aldous-Broder)
• ..can need a lot of memory (Wilson‘s)
Bias not automatically a bad thing!
Let’s look a algorithms that add constraints to random walks:
• Hunt-and-Kill
• Recursive Backtracker
Adding Constraints to Random Walks
29
Starting at an arbitrary location,
perform a random walk,
avoiding previously visited cells.
When no more moves are
possible, backtrack to the most
recently visited cell and resume
the random walk from there.
The algorithm ends when it tries
to backtrack from the cell where
it started.
Recursive Backtrack
30
• Start at A4. Put current cell on the stack
• Choose an unvisited neighbor randomly - Carve a path and push it
on the stack. A3 = current cell
Recursive Backtracker
stack
A4
stack
A3
A4
stack
31
• Continue with the process.. Put the cells on the stack
• We‘re stuck - B4 has no unvisited neighbors
Recursive Backtracker
stack
C4
C3
…
A3
A4
stack
B4
C4
C3
…
A3
A4
32
• Pop the dead end from the stack C4 is again our current cell
• C4 has an unvisited neighbor D4
Recursive Backtracker
stack
B4
C4
C3
…
A3
A4
stack
D4
C4
C3
…
A3
A4
33
• Continue until every cell has been visited
• Final cell is always a dead end backtrack to the beginning.
Recursive Backtracker
stack
A2
A1
B1
…
A3
A4
stack
A2
A1
B1
…
A3
A4
34
• Stack is empty. Algorithm is finished.
Recursive Backtracker
stack
deapth-first search
35
• long, twisty passages with
relatively few dead ends
• fast - as it visits every cell
only twice
• needs considerably memory
to keep track of visited cells
Recursive Backtrack
36
ABAP
• colored mazes in html view
• more 7.4/7.5 magic
Github
Javascript mazes… and UI
• D3.js
• openUI5
Future with Mazes
37
More is possible…