Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
-1 / 0 / 0
Регистрация: 07.12.2019
Сообщений: 25

Задача на вычисление количество маршрутов

09.12.2019, 21:17. Показов 5619. Ответов 4

Студворк — интернет-сервис помощи студентам
После завершения уборки у робота-пылесоса остался низкий уровень заряда батареи и ему необходимо как можно быстрее добраться до зарядного устройства. У робота-пылесоса есть план комнаты, в которой он находится. Известно, что для удобства ориентации робота план комнаты разбит на квадраты размером в 1 корпус робота. Комната имеет прямоугольную форму и площадь X*Y квадратов. На плане есть отметки где в комнате расставлена мебель. В начале робот-пылесос находится в левом нижнем углу комнаты и для зарядки ему надо попасть в правый верхний угол комнаты. Заряда батареи робота осталось на то чтобы пройти M квадратов начиная от текущего местоположения. От вас требуется определить сможет ли робот добраться до зарядного устройства и если да то каким количеством маршрутов. Робот может перемещаться только вверх-вниз и влево-вправо. В каждую клетку можно попасть только 1 раз.

Формат входных данных

Первая строчка входных данных содержит натуральные числа X, Y и М, не превосходящих 1000. Далее идет план комнаты в виде X строчек из Y символов в каждой. Один символ соответствует одному квадрату: если символ равен 1, то в квадрат можно попасть, если он равен 0, то квадрате находится препятствие в виде мебели. Первоначальное положение робота – левый нижний угол (первый символ последней строки), выход находится в правом верхнем углу (последний символ первой строки) оба этих символа равны 1.

Формат выходных данных

Программа должна напечатать «yes» если робот сможет добраться до зарядного устройства и количество маршрутов, ведущих к нему через M квадратов, или слово «no», если таких маршрутов не существует.

Sample Input:

3 5 7
11111
10101
11111
Sample Output:

yes 3
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.12.2019, 21:17
Ответы с готовыми решениями:

Задача на построение маршрутов
Дано квадратное поле размером N на N клеток, в клетках помещены символы «Н» - начало трассы, «К» - конец трассы, «П» - преграда, «О» - ...

Количество маршрутов
Доброе утро всем!:) Есть задачка. На картинке показаны шесть квадратов и возможные маршруты их прохождения. НУжно посчитать количество...

Посчитать количество маршрутов
Лестница имеет определенное количество ступенек N. Кенгуру может одним прыжком преодолеть не более К ступенек. Кенгуру пытается каждый...

4
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
10.12.2019, 05:36
Задача довольно легко решается.

1) Ставим робота в правый нижний угол.
2) Добавляем ячейку с координатами (0;0) в пройденный путь.
3) оглядываемся и, если возможно, выбираем куда двигаться (влево/вправо/вверх/вниз).
4) если вариантов несколько, то копируем пройденный путь и уже два робота двигаются по разным маршрутам.
5) повторяем шаги 3-4, проверяя, чтобы в пройденном пути координаты не повторялись. Если робот случайно добрался до цели - он останавливается.
6) После М шагов программа останавливается.
7) сравниваются пути и считаются уникальные и у которых в конце есть координата цели.
0
-1 / 0 / 0
Регистрация: 07.12.2019
Сообщений: 25
10.12.2019, 16:08  [ТС]
Хм.... Алгоритм интересный, но не знаете ли вы как его реализовать на Питоне? Просто у меня пока нет представления
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
10.12.2019, 17:27
Думаю, стоит начать с парсинга входных данных и создания матрицы, как считаете?
0
-1 / 0 / 0
Регистрация: 07.12.2019
Сообщений: 25
10.12.2019, 19:23  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Думаю, стоит начать с парсинга входных данных и создания матрицы, как считаете?
Да, дельная мысль

Смотрите-ка, я тут нашел программу, но она на C++. Если шарите, попрошу вашей помощи
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <vector>
 
int main()
{
    int n, m;
    std::cin >> n >> m;
    
    std::vector< std::vector< int > > matrix(n, std::vector< int > (m) );
    matrix[0][0] = 1;
    
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < m; ++j)
        {
            int x;
            std::cin >> x;
            if ( x != 0 )
            {
                if ( i != 0 )
                    matrix[i][j] += matrix[i - 1][j];
                    
                if ( j != 0 )
                    matrix[i][j] += matrix[i][j - 1];
            }
        }
    }
    
    int count = matrix[n - 1][m - 1];   
    if ( count == 0 )
        std::cout << "Impossible";
    else
        std::cout << count;
}

и задачу:
Кликните здесь для просмотра всего текста

Узник пытается бежать из замка, который состоит из MN квадратных комнат, расположенных в виде прямоугольника M×N. Между любыми двумя соседними комнатами есть дверь , однако некоторые комнаты закрыты и попасть в них нельзя. В начале узник находится в угловой комнате и для спасения ему надо попасть в противоположную угловую комнату. Времени у него немного, всего он может побывать не более, чем в M+N-1 комнате, включая начальную и конечную комнату на своем пути, то есть с каждым переходом в соседнюю комнату расстояние до выхода из замка должно уменьшаться. От вас требуется найти количество различных маршрутов, ведущих к спасению.
Формат входных данных
Первая строчка входных данных содержит натуральные числа M и N, не превосходящих 1000. Далее идет план замка в виде M строчек из N символов в каждой. Один символ соответствует одной комнате: если символ равен 1, то в комнату можно попасть, если он равен 0, то комната закрыта. Первоначальное положение узника – левый нижний угол (первый символ последней строки), выход находится в правом верхнем углу (последний символ первой строки, оба этих символа равны 1).
Формат выходных данных
Программа должна напечатать количество маршрутов, ведущих узника к выходу и проходящих через M+N-1 комнату, или слово impossible, если таких маршрутов не существует.
Входные данные подобраны таким образом, что искомое число маршрутов не превосходит 2.000.000.000.
Пример
Входные данные
3 5
11111
10101
11111
Выходные данные
3
Входные данные
3 5
11101
10101
10111
Выходные данные
impossible

По факту, это та же самая задача, но в моей количество клеток, которое он может пройти, дано изначально, а в другой задаче оно вычисляется по формуле N+M-1. У меня возникает вопрос: где вообще счётчик там?
Другая проблемка: начало в (0,0), у нас в (3,0), а конец в (3,3), у нас в (0,3). Как я понимаю можно же заменить 3-ью строчку на 1 и все, ведь так?

Если поможете, буду искренне благодарен)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.12.2019, 19:23
Помогаю со студенческими работами здесь

Количество маршрутов с препятствиями
Здравствуйте, вот познаю основы динамического программирование и столкнулся с проблемой во время решения классической задачи...

Количество маршрутов в прямоугольной таблице
В прямоугольной таблице N×M вначале игрок находится в левой верхней клетке. За один ход ему разрешается перемещаться в соседнюю клетку либо...

Количество маршрутов в прямоугольной таблице
В прямоугольной таблице N×M вначале игрок находится в левой верхней клетке. За один ход ему разрешается перемещаться в соседнюю клетку либо...

Количество маршрутов в прямоугольной таблице
приветствую вас, участники форума! ;) очень нуждаюсь в вашей помощи в решении задачи на сайте Сириус. Задание В прямоугольной...

количество маршрутов, ведущих узника к выходу
Узник пытается бежать из замка, который состоит из MN квадратных комнат, расположенных в виде прямоугольника M×N. Между любыми двумя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru