    edges = {tuple(str(node).split()[0] for node in row) for row in output['edges']}
    reached, pending_nodes = {'A'}, ['A']
    while pending_nodes:
        source = pending_nodes.pop()
        for start, end in edges:
            if start == source and end not in reached:
                reached.add(end)
                pending_nodes.append(end)
    check('程序按真实识别边计算A/B/C可达而D不可达', reached == {'A', 'B', 'C'} and edges == {('A', 'B'), ('B', 'C')})
    result = {'raw_edges': output['edges'], 'edges': [list(edge) for edge in sorted(edges)], 'reachable': sorted(reached), 'unreachable': ['D']}
