สมมติว่าเรามีกราฟที่ไม่มีทิศทาง ซึ่งเราต้องตรวจสอบว่าเราสามารถหาวงจรความยาวคี่ในกราฟนั้นได้หรือไม่
ดังนั้น หากอินพุตเป็นเหมือน adj_list =[[1, 2], [0, 3, 4], [0, 3, 4], [1, 2, 4], [1, 2, 3]]พี>
แล้วผลลัพธ์จะเป็น True เนื่องจากมีรอบความยาวคี่ เช่น [0, 1, 3, 4, 2], [1, 3, 4], [2, 3, 4].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน dfs() นี่จะใช้โหนดฉัน
- ถ้าโหนดอยู่ในเส้นทาง
- คืนค่าจริงเมื่อ (i - path[node]) เป็นเลขคี่
- ถ้าโหนดถูกเยี่ยมชมแล้ว
- คืนค่าเท็จ
- ทำเครื่องหมายโหนดว่าเข้าชมแล้ว
- เส้นทาง[โหนด] :=ผม
- สำหรับแต่ละ c ใน arr[node] ทำ
- ถ้า dfs(c, i + 1) เป็นจริง ดังนั้น
- คืนค่า True
- ถ้า dfs(c, i + 1) เป็นจริง ดังนั้น
- เส้นทางเดล[โหนด]
- คืนค่าเท็จ
- จากวิธีหลัก ให้ทำดังนี้ -
- เข้าชมแล้ว :=ชุดใหม่ เส้นทาง :=แผนที่ใหม่
- สำหรับ i ในช่วง 0 ถึงขนาดของ arr ทำ
- ถ้า dfs(i, 0) เป็นจริง ดังนั้น
- คืนค่า True
- คืนค่าเท็จ
ตัวอย่าง (Python)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class Solution: def solve(self, arr): def dfs(node, i): if node in path: return (i - path[node]) % 2 == 1 if node in visited: return False visited.add(node) path[node] = i for c in arr[node]: if dfs(c, i + 1): return True del path[node] return False visited, path = set(), {} for i in range(len(arr)): if dfs(i, 0): return True return False ob = Solution() adj_list = [[1, 2], [0, 3, 4], [0, 3, 4], [1, 2, 4], [1, 2, 3]] print(ob.solve(adj_list))
อินพุต
[[1, 2], [0, 3, 4], [0, 3, 4], [1, 2, 4], [1, 2, 3]]
ผลลัพธ์
True