Я хотел бы создать программу на Java, которая вычисляет количество путей, которые робот может принимать из левого верхнего угла сетки T (x, y) в нижнем левом углу .. Используя каждый квадрат в сетке только один раз и используя ВСЕ квадраты в сетке. Робот может двигаться вверх влево и вправо, что делает его более сложным. Я знаю, что это рекурсивная программа, которую я просто не знаю, как ее реализовать.Алгоритм подсчета количества путей в сетке X по Y
ответ
Вам нужно следить за количеством свободных площадей и, когда вы достигнете в левом нижнем углу вы убедитесь, что вы использовали все квадраты.
static int countPaths(boolean[][] grid) {
int freeSquares = 0;
for(int y = 0; y < grid.length; y++) {
for(int x = 0; x < grid[y].length; x++) {
if(grid[y][x]) freeSquares++;
}
}
return _countPaths(grid, 0, 0, freeSquares);
}
static int _countPaths(boolean[][] grid, int x, int y, int freeSquares) {
if(!grid[y][x]) return 0;
if(y == grid.length-1 && x == 0) { // bottom left
if(freeSquares == 1) return 1;
else return 0;
}
int sum = 0;
grid[y][x] = false;
for(int dy = -1; dy <= 1; dy++) {
for(int dx = -1; dx <= 1; dx++) {
int newX = x+dx, newY = y+dy;
if(newX < 0 || newY < 0 || newY >= grid.length || newX >= grid[y].length) continue;
if((dx == 0 && dy == 0) || (dx != 0 && dy != 0)) continue;
sum += _countPaths(grid, x+dx, y+dy, freeSquares-1);
}
}
grid[y][x] = true;
return sum;
}
public static void main (String args[]) {
boolean[][] grid = {{true, true, true, false},
{true, true, true, false},
{true, true, true, true},
{true, true, true, true}};
System.out.println(countPaths(grid));
}
Awesome спасибо много! –
Тестирование решения –
Он отлично работает. Где можно изменить размер сетки? Текущий - 4x4 .... например, если мне нужно 6 на 8 –
Итак, что вам нужно знать? Вам нужно знать текущее состояние платы и где находится робот. Из этого вы можете исследовать каждую из соседних ячеек, которые еще не были посещены. Когда вы исследуете каждую ячейку, примените алгоритм рекурсивно, чтобы исследовать их смежные ячейки. В конце концов, каждое исследование либо найдет цель, либо лишится возможностей.
Основной алгоритм будет выглядеть примерно так:
explore(board, position) {
if (position == goal) {
count++
return
}
board.mark(position)
for cell in position.neighbors
if not board.ismarked(cell)
explore(board, cell)
board.unmark(position)
}
Спасибо, но как вы убедитесь, что робот посещает каждый квадрат в сетке? –
А - Я забыл это требование. Для этого очень легко модифицировать алгоритм. Реализовать и понять алгоритм, и вы должны уметь это понять. – pburka
Хорошо, лемми, попробуй, что .. Ха-ха, я думаю, мне понадобится помощь с некоторыми из них. Голосование. –
- 1. (X, Y) в сетке
- 2. Аппроксимационный алгоритм для непересекающихся путей в сетке
- 3. Алгоритм подсчета количества уникальных цветов в изображении
- 4. Алгоритм обнаружения всплеска по графику x y
- 5. Перемещение «робота» в сетке x y - python
- 6. Расчет количества путей по графику
- 7. Создание случайных координат X, Y в сетке
- 8. Алгоритм перетаскивания объектов по фиксированной сетке
- 9. Рассчитать перекрытие между двумя прямоугольниками по сетке x/y?
- 10. Подсчет количества путей в сетке с использованием динамического программирования?
- 11. Алгоритм несвязанных путей
- 12. Число путей в сетке mXn
- 13. алгоритм для сравнения путей координат
- 14. X и Y с координатой - алгоритм
- 15. Алгоритм определения индекса сетки x/y
- 16. Алгоритм подсчета уровня
- 17. Алгоритм подсчета совпадений строк
- 18. Параллельный алгоритм для подсчета количества листьев в двоичном дереве
- 19. python - алгоритм подсчета алгоритмов с использованием «поразрядных или x и y»
- 20. Алгоритм вычисления площади области в сетке квадратов
- 21. Преобразование чисел в сетке в соответствующие координаты x, y
- 22. Ошибка в сетке (X, Y, Z) в MATLAB
- 23. Алгоритм поиска знака плюса в сетке
- 24. Алгоритм BFS - кратчайшая прогулка по сетке с ограниченными шагами
- 25. Алгоритм: поместите y шары в x-поля, где x <= y
- 26. vba для подсчета количества кликов по гиперссылке
- 27. Neo4j - Показатели количества путей
- 28. Доступные JLabels в сетке X и Y координаты?
- 29. Java получить доступны X и Y в сетке
- 30. Алгоритм динамического программирования: Прогулка по сетке
Вы можете начать использовать IDE, написать код, вернуться с конкретной проблемой. –
* «Я просто не знаю, с чего начать». * Начните в левом верхнем углу. –
Опишите на словах, как бы вы регрессировали эту проблему. Подсказка: если ваш робот находится в (0,0), и он не посещал какие-либо ячейки, куда он может пойти? Если ваш робот переместился с (0,0) на (0,1), куда он может пойти? – pburka