|
11 / 11 / 2
Регистрация: 30.03.2010
Сообщений: 199
|
||||||
Обход данных23.04.2021, 10:28. Показов 2203. Ответов 18
Метки нет (Все метки)
Добрый день!
Устал биться с рекурсией. Возможно кто-то уже делал подобное. Суть задачи. в программу вводятся данные о наследовании. Например: 4 # Колво вводимых элементов A # Главный предок B : A # B наследуется от А C : A # С наследуется от А D : B C # D наследуется от B и С Затем в следующих данных вводится запрос является ли такой-то класс 1 предком класса 2: 4# Колво искомых запросов A B #Является ли А предком класса В. Ответ YES B D #Является ли В предком класса D. Ответ YES C D #Ответ YES D A #Ответ NO Также входные данные могут быть такие: A X /|\ / \ B C Y Z \| \ / D V / \ \ E F W \ G lst_mro = [ # список введённых строк 'G : F', # сначала отнаследуем от F, потом его объявим, корректный алгоритм все равно правильно обойдёт граф, независимо что было раньше: наследование или объявление 'A', 'B : A', 'C : A', 'D : B C', 'E : D', 'F : D', # а теперь другая ветка наследования 'X', 'Y : X A', # свяжем две ветки наследования для проверки, обошла ли рекурсия предков Z и предков Y в поисках A 'Z : X', 'V : Z Y', 'W : V', ] lst_q = [ # список введённых запросов 'A G', # Yes # A предок G через B/C, D, F 'A Z', # No # Y потомок A, но не Y 'A W', # Yes # A предок W через Y, V 'X W', # Yes # X предок W через Y, V 'X QWE', # No # нет такого класса QWE 'A X', # No # классы есть, но они нет родства ![]() 'X X', # Yes # родитель он же потомок '1 1', # No # несуществующий класс ] Не знаю где я ошибся и не знаю как исправить мой код, чтобы он работал:
0
|
||||||
| 23.04.2021, 10:28 | |
|
Ответы с готовыми решениями:
18
Рекурсивный обход. Не могу сделать табуляцию. Обход с выводом имен файлов Рекурсивный обход и помещение данных в массив Ajax извлечение данных и обход их циклом for.of |
|
11 / 11 / 2
Регистрация: 30.03.2010
Сообщений: 199
|
|
| 24.04.2021, 14:52 [ТС] | |
|
eaa, Вроде все расписал...
Ввод классов: 4 A B:A C:A D:B C Далее проверка. Вводим количество запросов: 4 A B #Является ли А предком класса В. Возвращается Ответ YES B D #Является ли В предком класса D. Возвращается Ответ YES C D #Возвращается Ответ YES D A #Возвращается Ответ NO
0
|
|
|
Костыли любой сложности
201 / 146 / 36
Регистрация: 27.10.2019
Сообщений: 843
|
|
| 24.04.2021, 15:10 | |
|
lemuriec, https://github.com/marcosfede/... tection.py это?
0
|
|
|
Status 418
|
||||||
| 24.04.2021, 15:37 | ||||||
|
как говорится "очень интересно, но ни### не понятно".
так что ли?
0
|
||||||
|
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
|
|
| 24.04.2021, 15:40 | |
|
0
|
|
|
11 / 11 / 2
Регистрация: 30.03.2010
Сообщений: 199
|
|
| 26.04.2021, 10:22 [ТС] | |
|
eaa, Не думаю что задание будет понятнее))
Вот оно: Вам дано описание наследования классов в следующем формате. <имя класса 1> : <имя класса 2> <имя класса 3> ... <имя класса k> Это означает, что класс 1 отнаследован от класса 2, класса 3, и т. д. Или эквивалентно записи: class Class1(Class2, Class3 ... ClassK): pass Класс A является прямым предком класса B, если B отнаследован от A: class B(A): pass Класс A является предком класса B, если A = B; A - прямой предок B существует такой класс C, что C - прямой предок B и A - предок C Например: class B(A): pass class C(B): pass # A -- предок С Вам необходимо отвечать на запросы, является ли один класс предком другого класса Важное примечание: Создавать классы не требуется. Мы просим вас промоделировать этот процесс, и понять существует ли путь от одного класса до другого. Формат входных данных В первой строке входных данных содержится целое число n - число классов. В следующих n строках содержится описание наследования классов. В i-й строке указано от каких классов наследуется i-й класс. Обратите внимание, что класс может ни от кого не наследоваться. Гарантируется, что класс не наследуется сам от себя (прямо или косвенно), что класс не наследуется явно от одного класса более одного раза. В следующей строке содержится число q - количество запросов. В следующих q строках содержится описание запросов в формате <имя класса 1> <имя класса 2>. Имя класса – строка, состоящая из символов латинского алфавита, длины не более 50. Формат выходных данных Для каждого запроса выведите в отдельной строке слово "Yes", если класс 1 является предком класса 2, и "No", если не является. Sample Input: 4 A B : A C : A D : B C 4 A B B D C D D A Sample Output: Yes Yes Yes Добавлено через 1 час 18 минут Arsegg, что такое dfs? очень хочется понять
0
|
|
|
|
|||
| 26.04.2021, 10:48 | |||
|
То, что у вас в функции видится, как глобалка CLASSES, должно либо стать параметром classes, либо, что вероятнее, исчезнуть вообще. Потому что дерево предков класса должно получаться из самого класса. Класс знает о своих "родителях", не так ли?
0
|
|||
| 26.04.2021, 15:42 | |
|
lemuriec, В ООП главное понимание смысла наследования. Формализация наследования классов, приучает к тупому манипулированию с классами, без понимания их содержательной сущности. Это вредное занятие, мешающее освоению ООП. Хотя такой прием может использоваться в каком либо автомате, для которого все равно чем он оперирует.
Добавлено через 3 минуты Правильнее было бы говорить не о наследовании классов, а о дереве наследования некоторых произвольных объектов.
0
|
|
|
11 / 11 / 2
Регистрация: 30.03.2010
Сообщений: 199
|
|
| 26.04.2021, 19:04 [ТС] | |
|
Viktorrus, да ты прав. Но я изучаю питон на степике. И к сожалению задания там формируются именно так...
Добавлено через 43 секунды Viktorrus, и я встал в тупик. как сделать так чтобы после обследования одной ветки поиск переходил на соседнюю
0
|
|
| 26.04.2021, 21:40 | ||||||
|
lemuriec, Если создать классы, хотя бы пустые, то с помощью средств питона можно пройтись по всему дереву наследования. Лутц описывает алгоритм, как это сделать. И по-моему дан код.
Добавлено через 34 минуты lemuriec, Хотя у Лутца решается другая задача, чем у Вас. У Вас задается главный суперкласс и затем задаются подклассы развивая дерево сверху вниз. Лутц решает другую задачу. Как для заданного класса найти все его суперклассы в дереве наследования. Для этого используется метод class.__bases__ -> tuple Постепенно, шаг за шагом двигаясь вверх по дереву, можно найти все суперклассы для заданного класса. Добавлено через 52 минуты Вот как это работает. Кликните здесь для просмотра всего текста
0
|
||||||
|
11 / 11 / 2
Регистрация: 30.03.2010
Сообщений: 199
|
||
| 27.04.2021, 09:31 [ТС] | ||
|
dondublon,
0
|
||
|
Модератор
|
||||||
| 27.04.2021, 09:57 | ||||||
|
Вроде работает:
0
|
||||||
|
11 / 11 / 2
Регистрация: 30.03.2010
Сообщений: 199
|
|
| 27.04.2021, 11:49 [ТС] | |
|
другое?DmFat, Спасибо. Почти! )) один тест проходит из 16. Но. Буду плясать от твоего варианта
0
|
|
|
Status 418
|
||||||
| 27.04.2021, 17:14 | ||||||
Сообщение было отмечено lemuriec как решение
Решение
вроде так:
1
|
||||||
|
11 / 11 / 2
Регистрация: 30.03.2010
Сообщений: 199
|
|
| 27.04.2021, 19:01 [ТС] | |
|
eaa, ДА! ГЕНИЙ!!!))) теперь буду изучать что ты сделал ))
0
|
|
| 27.04.2021, 20:44 | |
|
Не по теме: eaa, красота!
0
|
|
| 27.04.2021, 20:44 | |
|
Помогаю со студенческими работами здесь
19
Обход блокировки поля при вставке данных Обход Acl при открытии базы данных Обход в ширину обход в глубину кто поможет переделать 5 процедуру обход графа в глубину на обход графа в ширину Обход нескольких разных страниц и вывод данных из таблиц (скрипт отрабатывает на первой странице несколько раз) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера 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. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|