ใน Directed Acyclic Graph (DAG) หาโหนดที่ไม่มี incoming edges (in-degree = 0) เพราะโหนดเหล่านี้ไม่สามารถเข้าถึงได้จากโหนดอื่น ต้องเริ่มจากโหนดเหล่านี้จึงจะถึงทุกโหนด ใช้ set difference: all_nodes - nodes_with_incoming_edges
ขั้นตอนการทำงาน
- all_nodes = set(0..n-1)
- v = set() เก็บโหนดที่มี incoming edge (destination ของ edges)
- วนลูป edges เพิ่ม edge[1] เข้า v
- ans = all_nodes - v
- คืน ans
ตัวอย่างโค้ด
def solve(edges):
n = len(edges) # Note: n should be number of vertices, not edges count
all_nodes = set(range(n))
v = set()
for edge in edges:
v.add(edge[1])
ans = all_nodes - v
return ans
edges = [(0,1), (2,1), (3,1), (1,4), (2,4)]
print(solve(edges)) # Output: {0, 2, 3}
อินพุต/เอาต์พุต
Input: [(0,1),(2,1),(3,1),(1,4),(2,4)]
Output: {0, 2, 3}
หมายเหตุ: n ในโค้ดต้นฉบับใช้ len(edges) ซึ่งอาจไม่ถูกต้องถ้าจำนวน vertices != จำนวน edges ควรส่ง n เข้ามาแยกต่างหาก