diff options
-rw-r--r-- | sources/__init__.py | 0 | ||||
-rw-r--r-- | sources/reachability.py | 37 | ||||
-rw-r--r-- | tests/__init__.py | 0 | ||||
-rw-r--r-- | tests/test_reachability.py | 14 |
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 |