diff --git a/graphs/dfs.py b/graphs/dfs.py new file mode 100644 index 0000000..8fd438b --- /dev/null +++ b/graphs/dfs.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# author: bt3gl + + +from collections import deque + +class Graph: + + def __init__(self, edges, n): + + self.adj_list = [[] for _ in range(n)] + + for (src, dest) in edges: + self.adj_list[src].append(dest) + self.adj_list[dest].append(src) + + +def dfs(graph, v, discovered): + + discovered[v] = True + print(v, end=' ') + + for u in graph.adj_list[v]: + if not discovered[u]: # + dfs(graph, u, discovered) + + + +def iterative_dfs(graph, v, discovered): + + stack = deque() + stack.append(v) + + while stack: + + v = stack.pop() + + if discovered[v]: + continue + + discovered[v] = True + print(v, end=' ') + + adj_list = graph.adjList[v] + for i in reversed(range(len(adj_list))): + u = adj_list[i] + if not discovered[u]: + stack.append(u) +