예제 #1
0
bool GameBoard::Solvable(std::set<unsigned int> &remSqs, Difficulty diff)
{
	// Determines whether the puzzle is currently solvable

	// If there are fewer than 10 squares remaining, assume the puzzle is solvable
	if(remSqs.size() < 10)
	{
		writetoLog(_("Solvable - less than 10 empty squares"), _("GameBoard.log"));
		return true;
	}

	// If there are more than 65 squares remaing, assume the puzzle is not solvable
	if(remSqs.size() > 65)
	{
		writetoLog(_("Not solvable -  more than 65 empty squares"), _("GameBoard.log"));
		return false;
	}

    bool solved;
    GameBoard * trying = new GameBoard();

    trying->Binit();
    trying->Copy(*this);
    solved = trying->Solve(remSqs, diff);
    delete trying;

	if(solved)
		writetoLog(_("Solvable - checked"), _("GameBoard.log"));
	else
		writetoLog(_("Not solvable - checked"), _("GameBoard.log"));
	return solved;
}
예제 #2
0
bool GameBoard::Solvable()
{
	// Determines whether the puzzle is currently solvable

    bool solved;
    GameBoard * trying = new GameBoard();

    trying->Binit();
    trying->Copy(*this);
    solved = trying->Solve();
    delete trying;


	return solved;
}