# your code goes here
from collections import deque
def find_reachability_bfs(graph, source):
# 'visited' keeps track of reachable nodes
visited = {node: False for node in graph}
# Queue for BFS traversal
queue = deque([source])
visited[source] = True
while queue:
current = queue.popleft()
# Traverse all neighbors of the current node
for neighbor in graph[current]:
if not visited[neighbor]:
visited[neighbor] = True
queue.append(neighbor)
return visited
# Example Graph (Adjacency List)
graph = {
'A': ['B', 'C'],
'B': ['D'],
'C': [],
'D': [],
'E': ['F'], # 'E' and 'F' are disconnected from 'A'
'F': []
}
source_node = 'A'
reachability = find_reachability_bfs(graph, source_node)
# Output Results
print(f"Reachability from source node '{source_node}':")
for node, is_reachable in reachability.items():
print(f"Node {node}: {'Reachable' if is_reachable else 'Not Reachable'}")
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCgpkZWYgZmluZF9yZWFjaGFiaWxpdHlfYmZzKGdyYXBoLCBzb3VyY2UpOgogICAgIyAndmlzaXRlZCcga2VlcHMgdHJhY2sgb2YgcmVhY2hhYmxlIG5vZGVzCiAgICB2aXNpdGVkID0ge25vZGU6IEZhbHNlIGZvciBub2RlIGluIGdyYXBofQogICAgCiAgICAjIFF1ZXVlIGZvciBCRlMgdHJhdmVyc2FsCiAgICBxdWV1ZSA9IGRlcXVlKFtzb3VyY2VdKQogICAgdmlzaXRlZFtzb3VyY2VdID0gVHJ1ZQogICAgCiAgICB3aGlsZSBxdWV1ZToKICAgICAgICBjdXJyZW50ID0gcXVldWUucG9wbGVmdCgpCiAgICAgICAgCiAgICAgICAgIyBUcmF2ZXJzZSBhbGwgbmVpZ2hib3JzIG9mIHRoZSBjdXJyZW50IG5vZGUKICAgICAgICBmb3IgbmVpZ2hib3IgaW4gZ3JhcGhbY3VycmVudF06CiAgICAgICAgICAgIGlmIG5vdCB2aXNpdGVkW25laWdoYm9yXToKICAgICAgICAgICAgICAgIHZpc2l0ZWRbbmVpZ2hib3JdID0gVHJ1ZQogICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKG5laWdoYm9yKQogICAgICAgICAgICAgICAgCiAgICByZXR1cm4gdmlzaXRlZAoKIyBFeGFtcGxlIEdyYXBoIChBZGphY2VuY3kgTGlzdCkKZ3JhcGggPSB7CiAgICAnQSc6IFsnQicsICdDJ10sCiAgICAnQic6IFsnRCddLAogICAgJ0MnOiBbXSwKICAgICdEJzogW10sCiAgICAnRSc6IFsnRiddLCAjICdFJyBhbmQgJ0YnIGFyZSBkaXNjb25uZWN0ZWQgZnJvbSAnQScKICAgICdGJzogW10KfQoKc291cmNlX25vZGUgPSAnQScKcmVhY2hhYmlsaXR5ID0gZmluZF9yZWFjaGFiaWxpdHlfYmZzKGdyYXBoLCBzb3VyY2Vfbm9kZSkKCiMgT3V0cHV0IFJlc3VsdHMKcHJpbnQoZiJSZWFjaGFiaWxpdHkgZnJvbSBzb3VyY2Ugbm9kZSAne3NvdXJjZV9ub2RlfSc6IikKZm9yIG5vZGUsIGlzX3JlYWNoYWJsZSBpbiByZWFjaGFiaWxpdHkuaXRlbXMoKToKICAgIHByaW50KGYiTm9kZSB7bm9kZX06IHsnUmVhY2hhYmxlJyBpZiBpc19yZWFjaGFibGUgZWxzZSAnTm90IFJlYWNoYWJsZSd9Iik=