# your code goes here
# 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'}")
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCiMgeW91ciBjb2RlIGdvZXMgaGVyZQpmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQoKZGVmIGZpbmRfcmVhY2hhYmlsaXR5X2JmcyhncmFwaCwgc291cmNlKToKICAgICMgJ3Zpc2l0ZWQnIGtlZXBzIHRyYWNrIG9mIHJlYWNoYWJsZSBub2RlcwogICAgdmlzaXRlZCA9IHtub2RlOiBGYWxzZSBmb3Igbm9kZSBpbiBncmFwaH0KICAgIAogICAgIyBRdWV1ZSBmb3IgQkZTIHRyYXZlcnNhbAogICAgcXVldWUgPSBkZXF1ZShbc291cmNlXSkKICAgIHZpc2l0ZWRbc291cmNlXSA9IFRydWUKICAgIAogICAgd2hpbGUgcXVldWU6CiAgICAgICAgY3VycmVudCA9IHF1ZXVlLnBvcGxlZnQoKQogICAgICAgIAogICAgICAgICMgVHJhdmVyc2UgYWxsIG5laWdoYm9ycyBvZiB0aGUgY3VycmVudCBub2RlCiAgICAgICAgZm9yIG5laWdoYm9yIGluIGdyYXBoW2N1cnJlbnRdOgogICAgICAgICAgICBpZiBub3QgdmlzaXRlZFtuZWlnaGJvcl06CiAgICAgICAgICAgICAgICB2aXNpdGVkW25laWdoYm9yXSA9IFRydWUKICAgICAgICAgICAgICAgIHF1ZXVlLmFwcGVuZChuZWlnaGJvcikKICAgICAgICAgICAgICAgIAogICAgcmV0dXJuIHZpc2l0ZWQKCiMgRXhhbXBsZSBHcmFwaCAoQWRqYWNlbmN5IExpc3QpCmdyYXBoID0gewogICAgJ0EnOiBbJ0InLCAnQyddLAogICAgJ0InOiBbJ0QnXSwKICAgICdDJzogW10sCiAgICAnRCc6IFtdLAogICAgJ0UnOiBbJ0YnXSwgIyAnRScgYW5kICdGJyBhcmUgZGlzY29ubmVjdGVkIGZyb20gJ0EnCiAgICAnRic6IFtdCn0KCnNvdXJjZV9ub2RlID0gJ0EnCnJlYWNoYWJpbGl0eSA9IGZpbmRfcmVhY2hhYmlsaXR5X2JmcyhncmFwaCwgc291cmNlX25vZGUpCgojIE91dHB1dCBSZXN1bHRzCnByaW50KGYiUmVhY2hhYmlsaXR5IGZyb20gc291cmNlIG5vZGUgJ3tzb3VyY2Vfbm9kZX0nOiIpCmZvciBub2RlLCBpc19yZWFjaGFibGUgaW4gcmVhY2hhYmlsaXR5Lml0ZW1zKCk6CiAgICBwcmludChmIk5vZGUge25vZGV9OiB7J1JlYWNoYWJsZScgaWYgaXNfcmVhY2hhYmxlIGVsc2UgJ05vdCBSZWFjaGFibGUnfSIp