Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from collections import deque
- def top_sort_dfs(node, sorted_nodes, graph, visited, cycles):
- if node in cycles:
- raise Exception
- if node in visited:
- return
- visited.add(node)
- cycles.add(node)
- for child in graph[node]:
- top_sort_dfs(child, sorted_nodes, graph, visited, cycles)
- sorted_nodes.appendleft(node)
- cycles.remove(node)
- graph = {}
- visited = set()
- cycles = set()
- sorted_nodes = deque()
- while True:
- line = input().split('->')
- if 'End' == line[0]:
- break
- if len(line) == 1 or line[1].strip() == '':
- graph[line[0].strip()] = []
- else:
- graph[line[0].strip()] = line[1].strip().split(' ')
- try:
- for node in graph:
- top_sort_dfs(node, sorted_nodes, graph, visited, cycles)
- print(*sorted_nodes)
- except Exception:
- print('Invalid topological sorting')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement