Представьте себе робота, сидящего в верхнем левом углу сетки NxN. Робот может двигаться только в двух направлениях: вправо и вниз. Представьте, что определенные квадраты являются «пределами», так что робот не может на них наступить. Разработать алгоритм для получения всех возможных путей для робота.все возможные пути для робота
Вот ссылка, которую я получил, я думаю, что реализация неверна, поскольку она находит только один путь, отличный от всех возможных путей (более подробно, в строке 10, робот только спускается, если нет правильного пути вправо. Но чтобы найти все возможные пути, робот должен попробовать как вправо, так и вниз)? Хочу подтвердить, что мое понимание верное.
ArrayList<Point> current_path = new ArrayList<Point>();
public static boolean getPaths(int x, int y) {
Point p = new Point(x, y);
current_path.add(p);
if (0 == x && 0 == y) return true; // current_path
boolean success = false;
if (x >= 1 && is_free(x - 1, y)) { // Try right
success = getPaths(x - 1, y); // Free! Go right
}
if (!success && y >= 1 && is_free(x, y - 1)) { // Try down
success = getPaths(x, y - 1); // Free! Go down
}
if (!success) {
current_path.remove(p); // Wrong way!
}
return success;
}
спасибо заранее, Лин
Это не предложение if-else, а два if-утверждения. робот будет сначала идти вправо, если путь свободен, а затем спуститься вниз, если путь свободен – Paul
Вы пытаетесь найти все _paths_ или пытаетесь определить, существует ли путь _exists_, по которому может перемещаться робот ? Ваш текущий код даже не близок к решению прежней проблемы. –
@Paul, если право возвращает успех, оно никогда не опустится (даже если спуск также является допустимым путем). Пожалуйста, не стесняйтесь исправить меня, если я ошибаюсь. –