#ident "$Id: solution.c,v 1.4 2005/01/28 21:29:49 pwh Rel $" /* * Tower of Hanoi Puzzle solution logic. */ #include "hanoi.h" static int buildTower ( PUZZLE *puzzle, int height, int dest_peg ) { int status = 1; if ( height-- > 0 ) { int src_peg = FIND_DISK ( puzzle, height ); if ( src_peg != dest_peg ) { status = ( buildTower ( puzzle, height, OTHER_PEG ( src_peg, dest_peg ) ) && moveDisk ( puzzle, src_peg, dest_peg ) ); } if ( status ) status = buildTower ( puzzle, height, dest_peg ); } return ( status ); } int solve ( PUZZLE *puzzle ) { return ( buildTower ( puzzle, puzzle->height, RIGHT_PEG ) ); }