Rush Hour 'Traffic Jam' Solver

This is a C++ program that reads a Rush Hour
board from a text file, solves it, and produces a nice PostScript
file that shows the shortest solution. So you can cheat when
you can't solve the problem yourself. :-)

(Rush Hour Traffic Jam Puzzle is a board game by Binary Arts.)

aaobcc
..ob..
xxo...
deeffp
d..k.p
hh.k.p

It also dumps the solution in the format found on the
backside of the game cards.

Compilation

Usage

In the directory where rush_hour was created, and where the file
level.txt or level32.txt is found, invoke

./rush_hour 32

It will produce a solution for level 32 and store the result in
solution32.ps. You can look at that now:

gv solution32.ps

Or print it:

lpr solution32.ps

Level File Format

For level number X, you can store the level in either the file
level|X|.txt or in the generic file level.txt.

Look at level32.txt. It reads:

32:
aaobcc
..ob..
xxo...
deeffp
d..k.p
hh.k.p
-
This is a comment
This is also a comment.

The 32: is the level number. There must be a level number even in
the special file named after the level it containts. A level body
contains the board setup. The following characters are used:

a,...,k

length-2 cars

o,...,r

length-3 cars

x, y, z

your own cars

.

empty board cell

After the board cells are defined, there may be an optional comment,
starting with line starting with a minus characters. After the
optional comment, the board definition is terminated by an empty line.

There may be several boards in one file, each in the format
described above.

Currently, the board has a fixed size of 6x6 cells. This can be
changed in the source code, but it is untested.

Solving Technique

Brute force breadth first search.

That's generally a complex approach, but it works here since the
boards are small.