สมมติว่าเรามีกราฟในรูป edge list เราต้องตรวจสอบว่ามันเป็น forest (ชุดของต้นไม้ ไม่มี cycle) หรือไม่
ตัวอย่าง: edges = [[0,1],[0,2],[4,3]] เป็น forest (มี 2 ต้นไม้) ผลลัพธ์ True
ขั้นตอนการแก้ปัญหา (DFS Cycle Detection)
- สร้าง adjacency list
eจาก edges seen = set()- ฟังก์ชัน
dfs(node, prev):- หาก
node in seenคืน False (เจอ cycle) - เพิ่ม
nodeเข้าseen - สำหรับเพื่อนบ้าน
adjในe[node]:- หาก
adj != prevและdfs(adj, node)เป็น False คืน False
- หาก
- คืน True
- หาก
- สำหรับทุกโหนดใน
e: หากยังไม่ seen และdfs(node, -1)เป็น False คืน False - คืน True
ตัวอย่างโค้ด Python
from collections import defaultdict
class Solution:
def solve(self, edges):
e = defaultdict(list)
for u, v in edges:
e[u].append(v)
e[v].append(u)
seen = set()
def dfs(node, prev):
if node in seen:
return False
seen.add(node)
for adj in e[node]:
if adj != prev:
if not dfs(adj, node):
return False
return True
for node in e:
if node not in seen and not dfs(node, -1):
return False
return True
ob = Solution()
edges = [[0, 1], [0, 2], [4, 3]]
print(ob.solve(edges)) # Output: True
อินพุต
[[0, 1], [0, 2], [4, 3]]
เอาต์พุต
True