The blocks world has two kinds of components: A legal move is to
transfer a block from one place or block onto another place or
block, with these restrictions: Here is a simple blocks world
problem:  And here is its shortest solution:  A two-dimensional
array may be appropriate (as in the 8-puzzle), however: Stacks
are a natural structure for piles of blocks. This section
discusses blocks world move representation and its effect on the
state space search space. It is straightforward to think of a
move in the blocks world as transferring from one place (the
source) to another place (the destination).  So the name of the
block is not necessary to uniquely specify a move.  The three
moves used in the example (see to the left) are:  The doMove
method in the blocks world move class must return null if there
is no block on the source place. The number of move objects to
create is dependent on the number of places, but not on the
number of blocks.  In general, if there are n places, there
should be n*(n-1) move obje