Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 19.11.2015
Сообщений: 9

Напечатать количество маршрутов, ведущих узника к выходу

19.09.2016, 20:16. Показов 4938. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
напишите/объясните пожалуйста хотя бы алгоритм, как сделать на все случаи. не могу написать полноценную рабочую программу.

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

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

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

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

Программа должна напечатать количество маршрутов, ведущих узника к выходу и проходящих через M+N-1 комнату, или слово impossible, если таких маршрутов не существует.

Входные данные подобраны таким образом, что искомое число маршрутов не превосходит 2.000.000.000.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.09.2016, 20:16
Ответы с готовыми решениями:

Побег узника из замка. Найти количество различных маршрутов, ведущих к спасению
Доброе время суток уважаемые программисты. у меня есть интересная задача, решение которой очень хотелось бы узнать, ну или смысл...

Найти количество различных маршрутов ведущих к спасению узника
Задача простоя, как мне кажется , и по логике я делаю правильно. Но что-то не так.Прошу вашей помощи. Вот ссылка на условие ...

Найти количество различных маршрутов, ведущих к спасению узника из замка
Помогите решить задачку :)) 1 Попытка к бегству Время на тест - 3 секунды. Идентификатор для autotest: ol001 Узник...

12
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
22.09.2016, 18:59
Это обычный рекурсивный поиск пути из лабиринта. Только по достижении конечной клетки нужно не завершать работу, а увеличивать счётчик. По исчерпании путей, программа завершиться.
0
188 / 155 / 17
Регистрация: 18.12.2015
Сообщений: 179
22.09.2016, 21:25
Пусть s[a,b] - количество способов попасть в комнату с координатами (a,b).

Тогда:
s[1,1]=1
s[a,b]=s[a-1,b]+s[b,a-1], если комната не закрыта
s[a,b]=0, если комната закрыта.

Я думаю понятно:
1) в начальную комнату только один способ попасть - мы и так уже там;
2) в закрытую комнату мы попасть не можем, а значит есть 0 способов туда попасть;
3) все маршруты до комнаты (a,b) проходят либо через (a-1,b), либо через (a,b-1).

Определяем в цикле s[a,b] для случая a+b=2 (т.е. a=b=1); потом для случая a+b=3; a+b=4, и т.д. Когда доберемся до s[m,n] получим ответ.

Ещё как-то края замка надо будет учесть. Это сами продумайте, тут красивого единственно правильного решения я не вижу.

P.S. Если бы не было закрытых комнат, можно было бы сразу воспользоваться треугольником Паскаля и выдать ответ. Наличие закрытых комнат чуть-чуть усложняет расчёт.

Рекомендую, для общего развития, посмотреть, что такое "треугольник Паскаля", пригодится когда-нибудь.
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
22.09.2016, 22:13
Точно, это же на "динамику"!

Тогда, я бы предложил чуть иначе.

Инициализация по 1й строке:
s[1, 1]:=1;
s[1, j]:=1, но j меняется до тех пор, пока комната открыта, после нахождения закрытой - все остальные s[1, j]:=0
Аналогично, инициализация по 1у столбцу.

А дальше, как вы уже сказали, только просматривать можно и по-строчно, не обязательно радиусом - т.к. в формуле участвуют левая и верхняя клетки.
1
188 / 155 / 17
Регистрация: 18.12.2015
Сообщений: 179
23.09.2016, 13:03
ФедосеевПавел, довольно простой алгоритм получился. Я, вот, тоже, про динамическое программирование не вспомнил.

Начал думать, а "не написать ли мне эту программу", нашёл как инициализацию упростить:
s[1,1]:=1
s[0,j]:=0
s[j,0]:=0

А первую строку и первый столбец по общему алгоритму считаем.
1
Заблокирован
03.04.2020, 13:45
Можно код, пожалуйста.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
03.04.2020, 15:01
Misha3007, а для чего вам нужно решение для задачи с сайта mccme (с электронным судьёй)?
0
Заблокирован
03.04.2020, 16:45
Это для Сириуса. Правда там нужно на питоне, но я попытаюсь переделать с паскаля
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
03.04.2020, 17:07
Не понимаю, что такое "Сириус", видимо, онлайн курсы по программированию.
А почему вы не хотите попытаться сделать самостоятельно?

В одной из тем вы написали
Цитата Сообщение от Misha3007 Посмотреть сообщение
Я ещё в 7 классе....
Т.е., если займётесь самостоятельно, то сможете создавать программы. Я начал очень много позже - в 10 классе.
Подойдите к родителям и расскажите, как вам удалось "решить" значительную часть задач с ДОБРОВОЛЬНЫХ курсов. Сомневаюсь, что они одобрят... И делайте из этого выводы.

Попробуйте решить. Задача не сложная. Имеет как минимум два подхода к решению - ввод и последующая обработка матрицы, ввод и одновременная (в потоке) обработка одномерного массива.
Как обрабатывать и подсказка по упрощению инициализации приведены здесь в теме.

Я сейчас перечитал эту тему и сдал именно эту задачу на другом сайте - mccme. Т.е. обсуждения здесь более, чем достаточно.
0
0 / 0 / 0
Регистрация: 16.03.2020
Сообщений: 18
Записей в блоге: 1
05.04.2020, 08:10
ФедосеевПавел, простите, но все же спрошу. Я всё не могу понять, как я понял программу следует реализовывать через перебор координат, или как то по другому? (решение не нужно, нужно лишь чуть-чуть помочь)
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
05.04.2020, 17:08
mathic, ощущение, что вам лень на листочке нарисовать квадрат 2х2 и для него посчитать пути, потом то же самое для квадрата 3х3.
После этого придёт понимание способа решения.

Идея решения - в том, что у клетки две соседние, из которых можно прийти в неё. Значит количество путей для клетки будет равно сумме путей для соседки сверху и соседки слева.
Это приводит к необходимости знать количество путей для верхнего ряда и клеточек слева.
Таким образом, требуется вычислять пути для ВСЕХ клеточек слева направо сверху вниз.

Добавлено через 4 часа 53 минуты
Pascal
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
35
36
37
38
39
40
program mccme_2964_2;
 
var
  a: array of uint32;
  p, x: uint32;
  n, m: integer;
  j: integer;
begin
  readln(n, m);
  SetLength(a, m);
 
  p := 1;
  for j := 0 to m - 1 do
  begin
    Read(x);
    p := p and x;
    a[j] := p;
  end;
 
  for n := 2 to n do
  begin
    Read(p);
    p := p and a[0];
    a[0] := p;
    for j := 1 to m - 1 do
    begin
      Read(x);
      if x <> 0 then
        x := p + a[j];
      a[j] := x;
      p := x;
    end;
 
  end;
 
  if p = 0 then
    writeln('Impossible')
  else
    writeln(p);
end.
0
0 / 0 / 0
Регистрация: 16.03.2020
Сообщений: 18
Записей в блоге: 1
06.04.2020, 17:37
ФедосеевПавел, я пытался

Добавлено через 8 минут
ФедосеевПавел, спасибо, теперь стало понятнее
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
06.04.2020, 21:37
Сейчас дочитался
Цитата Сообщение от stirvet Посмотреть сообщение
Первоначальное положение узника – левый нижний угол (первый символ последней строки), выход находится в правом верхнем углу (последний символ первой строки, оба этих символа равны 1).
А я решал для левого верхнего, как в задании 2964 mccme.

mathic, в общем, вы теперь разобрались. Поэтому ограничусь тем, что сообщу о своей невнимательности. А ваше решение будет несколько иным - полный ввод матрицы и просмотр с левого нижнего угла по направлению вправо и вверх.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.04.2020, 21:37
Помогаю со студенческими работами здесь

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

Определить, сколько существует различных маршрутов, ведущих из левого верхнего в правый нижний угол
Дана прямоугольная доска N × M (N строк и M столбцов). В левом верхнем углу находится шахматный конь, которого необходимо переместить в...

Определить количество ведущих единиц
здарвствуйте все! помогите пожалуйста с заданиями по мере возможностей: 1) представить программу, позволяющую для заданного...

Определить количество ведущих нулей старшего байта short int
Представить программу, позволяющую для заданного целочисленного объекта short int определить количество ведущих нулей старшего его байта

Даны два числа X и Y без ведущих нулей. Вывести меньшее из их отражений без ведущих нулей
Даны два числа X и Y без ведущих нулей. Вывести меньшее из их отражений без ведущих нулей. Для получения отражения числа его надо читать...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru