From c520d3aac086a2da2373c576a3c32e8f1ec7d3d5 Mon Sep 17 00:00:00 2001 From: Chau Long Do Date: Wed, 4 May 2022 11:54:43 +0700 Subject: [PATCH] Create reachability_stack.py This can avoid stack overflow cases when using recursion --- .../reachability_stack.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 3. Algorithms on Graph/Week1-Graph-Decomposition1/1_finding_exit_from_maze/reachability_stack.py diff --git a/3. Algorithms on Graph/Week1-Graph-Decomposition1/1_finding_exit_from_maze/reachability_stack.py b/3. Algorithms on Graph/Week1-Graph-Decomposition1/1_finding_exit_from_maze/reachability_stack.py new file mode 100644 index 0000000..d5b4aff --- /dev/null +++ b/3. Algorithms on Graph/Week1-Graph-Decomposition1/1_finding_exit_from_maze/reachability_stack.py @@ -0,0 +1,32 @@ +#Uses python3 + +import sys + +def reach(adj, x, y): + #write your code here + stack = [x] + visited = set() + while stack: + v = stack.pop() + if v == y: + return 1 + visited.add(v) + for i in adj[v]: + if i in visited: + continue + stack.append(i) + return 0 + +if __name__ == '__main__': + input = sys.stdin.read() + data = list(map(int, input.split())) + n, m = data[0:2] + data = data[2:] + edges = list(zip(data[0:(2 * m):2], data[1:(2 * m):2])) + x, y = data[2 * m:] + adj = [[] for _ in range(n)] + x, y = x - 1, y - 1 + for (a, b) in edges: + adj[a - 1].append(b - 1) + adj[b - 1].append(a - 1) + print(reach(adj, x, y))