Ejemplo n.º 1
0
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 );
				}
			}
		}
	}
}
Ejemplo n.º 2
0
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;
}