void Solve( PiecesLeft pl, const PuzzleState &ps ) { if(!Solvable(ps)) { return; } if( pl.size() == 0 ) { printf( "Solution:\n" ); PrintState( ps ); PrintState( ps, fopen( solutionfilename, "w" ) ); exit( 0 ); } int i = *(pl.begin()); Piece piece = pieces[i]; //printf( "Attempting to fit in piece: %c\n", piece.id ); pl.erase( i ); for( int r = 0; r < 8; ++r ) { Piece newPiece = Rot( piece, r ); //printf( "Trying this way:\n" ); //PrintPiece( newPiece ); for( int y = -2; y < HEIGHT; ++y ) { for( int x = -2; x < WIDTH; ++x ) { if( PieceFits( ps, newPiece, x, y ) ) { PuzzleState newState = FillState( ps, newPiece, x, y ); Solve( pl, newState ); } } } } }
int main () { Vector<int> squares; int start; while(true) { cout << "Enter integers for puzzle (enter 0 when done): "; int num = GetInteger(); squares.add(num); if (num == 0) break; } while(true) { cout << "Enter starting index: "; start = GetInteger(); if (start < squares.size() && start >= 0) break; } if (Solvable(start, squares)) cout << "True! The puzzle is solvable." << endl; else cout << "False! The puzzle cannot be solved." << endl; return 0; }