38
Fun with Mazes Hendrik Neumann

Fun with Mazes

Embed Size (px)

Citation preview

Page 1: Fun with Mazes

Fun with Mazes

Hendrik Neumann

Page 2: Fun with Mazes

2

https://pragprog.com/titles/jbmaze/

Standing on the shoulders of giants (one in particular)

Page 3: Fun with Mazes

3

What is a Maze?

Page 4: Fun with Mazes

4

Some more..

Page 5: Fun with Mazes

5

grid

cells

walls

passages

Build mazes

Page 6: Fun with Mazes

6

Build mazes

Page 7: Fun with 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

Page 8: Fun with Mazes

8

„every cell can reach every

other cell by exactly one path”

logical and mathematical purity

perfect but yet flawed

Perfect maze

Page 9: Fun with Mazes

9

opposite of a perfect maze

„characterized by few (if any)

dead ends, and passages

forming loops”

multiple different paths

Braid maze

Page 10: Fun with Mazes

10

Easy by hand for a 4x4 maze ;-)

Computer should do the work:

Dijkstra

Solve a maze

Page 11: Fun with Mazes

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

Page 12: Fun with Mazes

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

Page 13: Fun with Mazes

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

Page 14: Fun with Mazes

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

Page 15: Fun with Mazes

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

Page 16: Fun with Mazes

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

Page 17: Fun with Mazes

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

Page 18: Fun with Mazes

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

Page 19: Fun with Mazes

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

Page 20: Fun with Mazes

20

Color a maze

Page 21: Fun with Mazes

21

coloring emphazises the maze‘s texture

Color a maze

Binary Tree Sidewinder Recursive

Backtracker

Page 22: Fun with Mazes

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

Page 23: Fun with Mazes

23

Aldous-Broder

Wilson‘s

Unbiased mazes

Random walk for unbiased algorithm

Page 24: Fun with Mazes

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

Page 25: Fun with Mazes

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

Page 26: Fun with Mazes

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

Page 27: Fun with Mazes

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

Page 28: Fun with Mazes

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

Page 29: Fun with Mazes

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

Page 30: Fun with Mazes

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

Page 31: Fun with Mazes

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

Page 32: Fun with Mazes

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

Page 33: Fun with Mazes

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

Page 34: Fun with Mazes

34

• Stack is empty. Algorithm is finished.

Recursive Backtracker

stack

deapth-first search

Page 35: Fun with Mazes

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

Page 36: Fun with Mazes

36

ABAP

• colored mazes in html view

• more 7.4/7.5 magic

Github

Javascript mazes… and UI

• D3.js

• openUI5

Future with Mazes

Page 37: Fun with Mazes

37

More is possible…

Page 38: Fun with Mazes

Thanks

Hendrik Neumann

[email protected]