Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2016 23:38:23

solo.test88
Зарегистрирован: 2016-08-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с выведением вершин графов без библиотек

 graph = {
1: [2, 3],
2: [4]
}
Имеется ориентированный граф Граф 1 и нужно вывести вершины в консоли:
1
2
4
3

Отредактировано solo.test88 (Авг. 6, 2016 23:40:37)

Офлайн

#2 Авг. 7, 2016 03:36:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Помогите разобраться с выведением вершин графов без библиотек

  
>>> def walk_graph(tree, node):
...     yield node
...     if node in tree:
...         for i in tree[node]:
...             for j in walk_graph(tree, i):
...                 yield j
... 
>>> graph = {
...     1: [2, 3],
...     2: [4]
... }
>>> 
>>> tuple(walk_graph(graph, 1))
(1, 2, 4, 3)
>>>



Офлайн

#3 Авг. 7, 2016 10:35:17

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Помогите разобраться с выведением вершин графов без библиотек

Зря вы так. Гражданин даже вопрос не сформулировал.

Скажем так
Вот это короче.

 >>> set(reduce(add,graph.values())+graph.keys())
set([1, 2, 3, 4])
Но это для двушки, и не хватает одной строчки.



Офлайн

#4 Авг. 7, 2016 11:39:13

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Помогите разобраться с выведением вершин графов без библиотек

doza_and
Вот это короче.
 set([1, 2, 3, 4])
Выводится не то. Во-первых, это множество, у которого нет порядка, а во-вторых, там нужно проходить в глубину (после двойки нужно выводить потомка двойки - четвёрку).



Отредактировано py.user.next (Авг. 7, 2016 11:40:59)

Офлайн

#5 Авг. 7, 2016 12:25:53

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Помогите разобраться с выведением вершин графов без библиотек

py.user.next
Выводится не то. ….. там нужно проходить в глубину
Где это написано? Автор просил дать все вершины. Он их получил.



Офлайн

#6 Авг. 7, 2016 14:19:52

solo.test88
Зарегистрирован: 2016-08-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с выведением вершин графов без библиотек

Супер! Большое спасибо Всем за помощь и оперативность))

Офлайн

#7 Авг. 7, 2016 14:41:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Помогите разобраться с выведением вершин графов без библиотек

doza_and
Где это написано?
Прямо у него в первом сообщении.

solo.test88
и нужно вывести вершины в консоли:
1
2
4
3

А вот сам граф, из которого понятно, почему именно так выводятся они.



Офлайн

#8 Авг. 7, 2016 14:54:24

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Помогите разобраться с выведением вершин графов без библиотек

Явного требования в спецификации нет.



Офлайн

#9 Авг. 7, 2016 15:05:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Помогите разобраться с выведением вершин графов без библиотек

doza_and
Явного требования в спецификации нет.
Графы обычно выводятся вполне определённо, поэтому было бы странным выводить просто какое-то неупорядоченное множество вершин. Мало того, у ориентированного графа есть понятие корня, поэтому ты не можешь просто начать выводить его весь с любой вершины, так как из некоторых вершин могут быть недостижимы какие-то вершины, тогда как от корня достижима любая вершина.



Отредактировано py.user.next (Авг. 7, 2016 15:06:29)

Офлайн

#10 Авг. 7, 2016 17:33:56

solo.test88
Зарегистрирован: 2016-08-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с выведением вершин графов без библиотек

py.user.next
Тут возникла следующая проблема, если использовать данный граф:

 graph = {
    1: [2, 3],
    2: [3, 4],
    4: [1]
}
то при запуске с первой вершины walk_graph(graph, 1) возникает рекурсивная ошибка: RecursionError: maximum recursion depth exceeded.

Отредактировано solo.test88 (Авг. 7, 2016 17:34:26)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version