Example #1
0
/*--------------------------------------
 * Function: SolveMaze()
 * Parameters: pt         Den punkt utifrån vilken vi vill lösa labyrinten.
 *             num_calls  Räknare för antal anrop.
 *             unmark     Indikerar huruvida UnmarkSquare()-funktionen ska
 *                        anropas.
 *
 * Description:
 *   Löser labyrinten (om möjligt) och räknar antalet anrop.
 *------------------------------------*/
static bool SolveMaze(pointT pt, int* num_calls, bool unmark) {
    ++(*num_calls);

    if (OutsideMaze(pt))
        return TRUE;

    if (IsMarked(pt))
        return FALSE;

    MarkSquare(pt);

    for (directionT dir = North; dir <= West; dir++) {
        // Om det är en vägg ivägen går vi vidare till nästa riktning.
        if (WallExists(pt, dir))
            continue;

        if (SolveMaze(AdjacentPoint(pt, dir), num_calls, unmark)) {
            // Vi måste avmarkera även här så att inte lösningen ligger kvar
            // som markerad i labyrinten.
            if (unmark)
                UnmarkSquare(pt);

            return TRUE;
        }
    }

    if (unmark)
        UnmarkSquare(pt);

    return FALSE;
}
Example #2
0
bool SolveMaze(pointT pt)
{
 if (OutsideMaze(pt))
 return true;
 if (IsMarked(pt))
 return false;
 MarkSquare(pt);
 for (directionT dir = North; dir <= West; dir=directionT(dir + 1))
 {
 if (!WallExists(pt, dir) && SolveMaze(AdjacentPoint(pt, dir)))
 {
 return true;
 }
 }
 UnmarkSquare(pt);
 return false;
}