![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Cool_abc |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Кирилл Репутация: ![]() ![]() ![]() |
Текст задачи:
Имеется N населенных пунктов, пронумерованных от 1 до N (N = 10). Некоторые пары пунктов соединены дорогами. Определить, можно ли по дорогам попасть из пункта 1 в N-й пункт. Информация о дорогах задается в виде последовательности пар чисел i и j (i < j), указывающих что i-й и j-й пункты соединены дорогой. Признак конца этой последовательности – пара нулей. Из условия я вынес 1 из основных положений, что по кругу между пунктами мы ходить не будем, т.е. например 1-2-3-5-6-1 (- догора), задача после этого сущаственно упростилась:) написал, но не работает прога, помогите плиз найти ошибку.. или мот я в корне был не прав.. наставьте на путь правильный Мой код:
первый проход вынес в основную программу, т.к. нужно было сделать 1 проход по всем x(i,1)=1, т.е. тем. у которых первый пункт - наш начальный и в процедуре в стоке "if x[A,2]=x[i,1] then .." не смог бы подставить вместо x[i,1] единицу |
![]() ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
наставьте на путь правильный ... первый проход вынес в основную программу, т.к. нужно было сделать 1 проход по всем x(i,1)=1, т.е. тем. у которых первый пункт - наш начальный и в процедуре в стоке "if x[A,2]=x[i,1] then .." не смог бы подставить вместо x[i,1] единицу Cool_abc, подобные вещи в рекурсии - первый признак, что что-то не так. Рекурсия должна быть элегантной )). Извини, не стал глубоко вникать в твой код. Я написал решение - проанализируй и попробуй сам найти свои ошибки. const Если комментов недостаточно - спрашивай, я всегда отвечу. Удачи! ![]() Добавлено через 4 мин. Да, еще: входные данные ьерутся из файла roads.dat . Вот его пример: Код 1 5 10 8 2 10 3 8 5 3 - тут ответ ДА. Нули в конце можешь добавить, но они не нужны (правда, в этом случае не должно быть пустых строк в конце). -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Cool_abc |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Кирилл Репутация: ![]() ![]() ![]() |
Добавлено через 4 мин. Да, еще: входные данные ьерутся из файла roads.dat . Вот его пример: Код 1 5 10 8 2 10 3 8 5 3 - тут ответ ДА. Нули в конце можешь добавить, но они не нужны (правда, в этом случае не должно быть пустых строк в конце). эм... здесь же по условию не подходят дходные данные.. x(i,j), где i < j, т.е. 10-8 и 5-3 не может быть. Первое число ( x[i,1] ) - это город, в который мы приходим, а 2 число ( x[i,2] ) - это город, в который ведет дорога из города x[i,1], я так понимаю. Поиск мы останавливаем, когда наткнулись на элемент x[i,2]=10, т.е. дорога из текущего города ведет в город под номером 10, а до этого элемента уже есть дорога (т.е. мы до него шли от одного из x[i,1] = 1 (по 1 из дорого, ведущих из 1 города)) но если бы даже не было условия i<j, то мы все равно бы не попали.. смотрим, где x[i,1]=1, нашли все такие элементы, их число = 1, значит смотрим дальше x[i,2] = 5, значит ищем все x[i,1]=5, их опять 1, это 5 3, дальше ищем x[i,1]=3, нашли, это 3 8, ищем x[i,1]=8, таких нет, дорога оборвалась и разветвлений никаких не было (т.е. до этого из каждого города выходило по 1 дороге), значит ответ "нет". насчет кода с решением, спасибо, сёчас буду читать, разбираться в нём Cool_abc, поиск ошибок начинай прямо с процедуры Vvod. Ну, заполнил ты в ней массив какими-то значениями, и что? Посмотри, что у тебя хранится в массиве X после того, как Vvod отработал. Это первое. Второе - я говорил много раз, и повторю еще раз: не пользуйся никогда магическими числами. Вот это что по-твоему: procedure find(A:int;var f:boolean); Я вот ввел 5 пар значений, и сразу даже не сообразил, в чем дело. У тебя ж считается количество введенных пар, следовательно ты знаешь, сколько городов есть и с каким числом надо сравнивать... В общем, если хочешь продолжить разбираться со своим методом решения - скажи... да, сейчас буду продолжать разбираться, за процедуру vvod спасибо:) понял, где там ошибка, у нас в локальных переменных x,y будут оставаться храниться нули, но мы их в массив не занесли; вот насчет магических числем.. я читал вашу тему "Как не надо писать программы", но тут без 10 никак), потому что по условию задачи, нам нужно найти дорогу из города 1 в город 10, т.е. в предпоследнем городе перед 10 городом из него будет идти дорога в город 10, что описано условием x[A,2]=10, поэтому имеено 10.. число городов у нас есть, оно ограничено, самый большой номер города м.б. равен 10; неограничено только число дорог, которые могуд идти из одного города, т.е. из первого города могут идти дороги во 2, 3,4,5,6,7 города, что будет выглядеть как 1-2 1-3 1-4 1-5 1-6 1-7 в массиве дошел дальше разбираться ![]() |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 18:37 |