Не уверен, что это оптимальное решение, но оно работает:
while (notDone()) {
moveForward();
if (isPathLeft()) {
if (isPathForward()) {
if (isPathRight()) {
turnRight();
} else {
turnLeft();
}
} else {
turnLeft();
}
} else {
if (isPathRight()) {
turnRight();
}
}
}