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)
- n = int(input())
- graph = {}
- visited = set()
- cycles = set()
- sorted_nodes = deque()
- for _ in range(n):
- line = input().split('->')
- if len(line) == 1 or line[1] == '':
- 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(f'Topological sorting: {", ".join(sorted_nodes)}')
- except:
- print('Invalid topological sorting')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement