diff --git a/sorts/topological_sort.py b/sorts/topological_sort.py index efce8165f..ad879f679 100644 --- a/sorts/topological_sort.py +++ b/sorts/topological_sort.py @@ -14,28 +14,26 @@ edges: dict[str, list[str]] = { } vertices: list[str] = ["a", "b", "c", "d", "e"] +class Topo: + def topo_sort(self): + visited = set() + stack = [] + def dfs(node): + visited.add(node) -def topological_sort(start: str, visited: list[str], sort: list[str]) -> list[str]: - """Perform topological sort on a directed acyclic graph.""" - current = start - # add current to visited - visited.append(current) - neighbors = edges[current] - for neighbor in neighbors: - # if neighbor not in visited, visit - if neighbor not in visited: - sort = topological_sort(neighbor, visited, sort) - # if all neighbors visited add current to sort - sort.append(current) - # if all vertices haven't been visited select a new one to visit - if len(visited) != len(vertices): - for vertice in vertices: - if vertice not in visited: - sort = topological_sort(vertice, visited, sort) - # return sort - return sort + for neighbor in edges[node]: + if neighbor not in visited: + dfs(neighbor) + + stack.append(node) + + return stack + + result = dfs("a") + return result[::-1] if __name__ == "__main__": - sort = topological_sort("a", [], []) + topo = Topo() + sort = topo.topo_sort() print(sort)