Найти - Пользователи
Полная версия: Помогите разобраться с выведением вершин графов без библиотек
Начало » Центр помощи » Помогите разобраться с выведением вершин графов без библиотек
1 2
solo.test88
 graph = {
1: [2, 3],
2: [4]
}
Имеется ориентированный граф Граф 1 и нужно вывести вершины в консоли:
1
2
4
3
py.user.next
  
>>> 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)
>>>
doza_and
Зря вы так. Гражданин даже вопрос не сформулировал.

Скажем так
Вот это короче.
 >>> set(reduce(add,graph.values())+graph.keys())
set([1, 2, 3, 4])
Но это для двушки, и не хватает одной строчки.
py.user.next
doza_and
Вот это короче.
 set([1, 2, 3, 4])
Выводится не то. Во-первых, это множество, у которого нет порядка, а во-вторых, там нужно проходить в глубину (после двойки нужно выводить потомка двойки - четвёрку).
doza_and
py.user.next
Выводится не то. ….. там нужно проходить в глубину
Где это написано? Автор просил дать все вершины. Он их получил.
solo.test88
Супер! Большое спасибо Всем за помощь и оперативность))
py.user.next
doza_and
Где это написано?
Прямо у него в первом сообщении.

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

А вот сам граф, из которого понятно, почему именно так выводятся они.
doza_and
Явного требования в спецификации нет.
py.user.next
doza_and
Явного требования в спецификации нет.
Графы обычно выводятся вполне определённо, поэтому было бы странным выводить просто какое-то неупорядоченное множество вершин. Мало того, у ориентированного графа есть понятие корня, поэтому ты не можешь просто начать выводить его весь с любой вершины, так как из некоторых вершин могут быть недостижимы какие-то вершины, тогда как от корня достижима любая вершина.
solo.test88
py.user.next
Тут возникла следующая проблема, если использовать данный граф:
 graph = {
    1: [2, 3],
    2: [3, 4],
    4: [1]
}
то при запуске с первой вершины walk_graph(graph, 1) возникает рекурсивная ошибка: RecursionError: maximum recursion depth exceeded.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB