22
Towers of Hanoi http://en.wikipedia.org/wiki/Image:Hanoiklein.jpg

Towers of Hanoi Hanoiklein.jpg

Embed Size (px)

Citation preview

Page 1: Towers of Hanoi Hanoiklein.jpg

Towers of Hanoi

http://en.wikipedia.org/wiki/Image:Hanoiklein.jpg

Page 2: Towers of Hanoi Hanoiklein.jpg

Towers of Hanoi• Move all the discs from the leftmost peg to the rightmost one.

– Only one disc may be moved at a time.

– A disc can be placed either on empty peg or on top of a larger disc.

start finish

Demo

Page 3: Towers of Hanoi Hanoiklein.jpg

Recursive Solution

Move n-1 smallest discs right.

Move n-1 smallest discs right. Move largest disc left.

cyclic wrap-around

Page 4: Towers of Hanoi Hanoiklein.jpg

The Recursive Process

Page 5: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(3, 1)

n = 3d = 1

Page 6: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(3, 1)

n = 3d = 1

Page 7: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(3, 1)

n=3dir = 1 if (n == 0) return;

move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(2, 0)

n = 2d = 0

Page 8: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(3, 1)

n=3dir = 1 if (n == 0) return;

move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(2, 0)

n = 2d = 0

Page 9: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(3, 1)

n=3dir = 1 if (n == 0) return;

move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(2, 0)

n = 2dir = 0 if (n == 0) return;

move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(1, 1)

n = 1d = 1

Page 10: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(3, 1)

n=3dir = 1 if (n == 0) return;

move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(2, 0)

n = 2dir = 0 if (n == 0) return;

move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(1, 1)

n = 1d = 1

Page 11: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(3, 1)

n=3dir = 1 if (n == 0) return;

move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(2, 0)

n = 2dir = 0 if (n == 0) return;

move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(1, 1)

n = 1dir = 1

if (n == 0) return; move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(0, 0)

n = 0d = 0

Page 12: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(3, 1)

n=3dir = 1 if (n == 0) return;

move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(2, 0)

n = 2dir = 0 if (n == 0) return;

move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(1, 1)

n = 1d = 1

Page 13: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(3, 1)

n=3dir = 1 if (n == 0) return;

move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(2, 0)

n = 2dir = 0 if (n == 0) return;

move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(1, 1)

n = 1d = 1

Page 14: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(3, 1)

n=3dir = 1 if (n == 0) return;

move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(2, 0)

n = 2dir = 0 if (n == 0) return;

move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(1, 1)

n = 1d = 1

Print “Move disk 1 right”

Page 15: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(3, 1)

n=3dir = 1 if (n == 0) return;

move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(2, 0)

n = 2d = 0

Page 16: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(3, 1)

n=3dir = 1 if (n == 0) return;

move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(2, 0)

n = 2d = 0

Page 17: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(3, 1)

n=3dir = 1 if (n == 0) return;

move(n - 1, 1 - d); if (dir == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - dir);

move(2, 0)

n = 2d = 0

Print “Move disk 2 left”

Page 18: Towers of Hanoi Hanoiklein.jpg

if (n == 0) return; move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(3, 1)

n=3dir = 1 if (n == 0) return;

move(n - 1, 1 - dir); if (dir == 1) System.out.println("Move disk " + n + " to right"); else System.out.println("Move disk " + n + " to left"); move(n - 1, 1 - dir);

move(2, 0)

n = 2dir = 0 if (n == 0) return;

move(n - 1, 1 - d); if (d == 1) System.out.println("Move disk " + n + “ right"); else System.out.println("Move disk " + n + “ left"); move(n - 1, 1 - d);

move(1, 1)

n = 1d = 1

Page 19: Towers of Hanoi Hanoiklein.jpg

3, 0

2, 1

1, 0 1, 0

2, 1

1, 0 1, 0

1 left 2 right 1 left 3 left 2 right 1 left1 left

n, left

1 14

2 7

3 4 65 9 10 1211 17 18 2019 23 24 2625

138 16 21 2722

2815

Recursive Tree

Page 20: Towers of Hanoi Hanoiklein.jpg

Recursive Graphics

Page 21: Towers of Hanoi Hanoiklein.jpg

21

Page 22: Towers of Hanoi Hanoiklein.jpg

22

Htree

• H-tree of order n– Draw an H.

– Recursively draw 4 H-trees of order n-1, one connected to each tip.

and half the size

order 1

order 2 order 3

tip

size