fun with mazes

Post on 13-Apr-2017

644 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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…

Thanks

Hendrik Neumann

h.neumann@reply.de

top related