summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sources/__init__.py0
-rw-r--r--sources/reachability.py37
-rw-r--r--tests/__init__.py0
-rw-r--r--tests/test_reachability.py14
4 files changed, 51 insertions, 0 deletions
diff --git a/sources/__init__.py b/sources/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sources/__init__.py
diff --git a/sources/reachability.py b/sources/reachability.py
new file mode 100644
index 0000000..07bb9df
--- /dev/null
+++ b/sources/reachability.py
@@ -0,0 +1,37 @@
+#Uses python3
+
+import sys
+
+
+def explore(adj, visited, x, y):
+ visited.append(x)
+ if x == y:
+ return
+ for i in adj[x]:
+ if i not in visited:
+ explore(adj, visited, i, y)
+
+
+def reach(adj, x, y):
+ visited = []
+ if x == y:
+ return 1
+ explore(adj, visited, x, y)
+ if y in visited:
+ return 1
+ 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))
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/__init__.py
diff --git a/tests/test_reachability.py b/tests/test_reachability.py
new file mode 100644
index 0000000..318309b
--- /dev/null
+++ b/tests/test_reachability.py
@@ -0,0 +1,14 @@
+import unittest
+from sources.reachability import reach
+
+
+class TestReachability(unittest.TestCase):
+
+ def testName(self):
+ adj = [[1, 3],[], [1],[2]]
+ self.assertEqual(1, reach(adj, 0, 3))
+
+
+if __name__ == "__main__":
+ #import sys;sys.argv = ['', 'Test.testName']
+ unittest.main() \ No newline at end of file