Вопрос № 20488: Здрасти ув. эксперты. Помогите решить следующую задачку на тему "рекурсия":
Имеется n населенных пунктов, пронумерованных от 1 до n. Некоторые пары пунктов соединены дорогами. Определить, можно ли попасть по этим дорогам из первого пунк...
Вопрос № 20488
Здрасти ув. эксперты. Помогите решить следующую задачку на тему "рекурсия":
Имеется n населенных пунктов, пронумерованных от 1 до n. Некоторые пары пунктов соединены дорогами. Определить, можно ли попасть по этим дорогам из первого пункта в n-ный. Информация о дорогах задается в виде последовательности пар чисел i и j (i<j) указывающих, что i-й и j-й пункты соединены дорогой.
Отправлен: 05.05.2005, 15:54
Вопрос задал: Игорь (статус: Посетитель)
Всего ответов отправлено: 2
Отвечает: Ayl
Здравствуйте, Игорь!
Хм... Поиск маршрута в графе? Ну смотри.
Берем первый пункт. Помечаем его как пройденный. Выбираем любой из связанных с ним пунктов, не помеченных как пройденные. Ищем маршрут из нового пункта в конечный.
Т.е. у тебя должна быть рекурсивная функция, которая принимает в качестве параметров начальную и конечную вершины. Ищет непомеченные связанные вершины и вызывает себя с параметрами: новая вершина, конечная вершина.
Если новая вершина = конечная вершина - маршрут найден.
Если не найдена непомеченная вершина - возвращаем флаг не найденности маршрута.
Если первый вызов вернул "не найдено" - маршрута нет.
В приложении смотри набросок кода.
Приложение:
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 05.05.2005, 17:36
Отвечает: dfdfdf
Здравствуйте, Игорь!
Мои соображения на эту тему: 1. (с требованием рекурсии)
функция (текущаяя точка, пункт назначения) : булевский
[
w:=false;
перебираем все пары с текущей точкой, если нашли что есть пара (тек. точка - пункт назначения) то то функция = истина если не нашли, то запускаем фунцию от каждой найденной пары к текущей точке. Если хоть одна вернула истину, то функция равна истина. Если же пар с тек. точкой нету или все вызовы функций вернули ложь то функция равна лжи.
]
2. Можно обойтись без рекурсии. Это делается с помощью битовых масок так:
Нумеруем все n вершин.
Упорядочеваем пары.
Делаем цикл от 1 до 2^n. (при этом если предствить число в двоичной системе, то можно положить что i`ый бит равный одному значит что это состояние есть в маршруте)
Далее анализируем на правильность маршрута.
P.S. Извиняюсь за простой язык, главное это понять как, а там реализовать на паскале дело плевое и зависит больше от вкусов.
Ответ отправил: dfdfdf (статус: 10-ый класс)
Отправлен: 05.05.2005, 18:09