Advertisement
viligen

topological_sorting_2_dfs

Aug 9th, 2022 (edited)
474
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.88 KB | None | 0 0
  1. from collections import deque
  2.  
  3.  
  4. def top_sort_dfs(node, sorted_nodes, graph, visited, cycles):
  5.     if node in cycles:
  6.         raise Exception
  7.     if node in visited:
  8.         return
  9.     visited.add(node)
  10.     cycles.add(node)
  11.  
  12.     for child in graph[node]:
  13.         top_sort_dfs(child, sorted_nodes, graph, visited, cycles)
  14.     sorted_nodes.appendleft(node)
  15.     cycles.remove(node)
  16.  
  17.  
  18. n = int(input())
  19. graph = {}
  20. visited = set()
  21. cycles = set()
  22. sorted_nodes = deque()
  23.  
  24. for _ in range(n):
  25.     line = input().split('->')
  26.     if len(line) == 1 or line[1] == '':
  27.         graph[line[0].strip()] = []
  28.     else:
  29.         graph[line[0].strip()] = line[1].strip().split(', ')
  30. try:
  31.     for node in graph:
  32.         top_sort_dfs(node, sorted_nodes, graph, visited, cycles)
  33.     print(f'Topological sorting: {", ".join(sorted_nodes)}')
  34. except:
  35.     print('Invalid topological sorting')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement