Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาความยาวของพาธที่ยาวที่สุดใน DAG โดยไม่มีโหนดซ้ำใน Python


สมมติว่าเรามีกราฟ acyclic กำกับหนึ่งรายการที่แสดงโดยรายการที่อยู่ติดกัน เราต้องหาเส้นทางที่ยาวที่สุดในกราฟโดยไม่เกิดโหนดซ้ำ

ดังนั้นหากอินพุตเป็นแบบ

โปรแกรมค้นหาความยาวของพาธที่ยาวที่สุดใน DAG โดยไม่มีโหนดซ้ำใน Python

จากนั้นผลลัพธ์จะเป็น 4 เนื่องจากเส้นทางคือ 0 -> 1 -> 3 -> 4 -> 2 ที่มีความยาว 4

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ตอบ :=0
  • n :=จำนวนโหนดของกราฟ
  • table :=รายการขนาด n และเติม -1
  • กำหนดฟังก์ชัน dfs() สิ่งนี้จะพาคุณ
  • ถ้า table[u] ไม่ใช่ -1 แล้ว
    • กลับตาราง[u]
  • p_len :=0
  • สำหรับแต่ละ vectex v ในกราฟ[u] ทำ
    • p_len :=สูงสุดของ p_len และ (1 + dfs(v))
  • ตาราง[u] :=p_len
  • ส่งคืน p_len
  • จากวิธีหลัก ให้ทำดังนี้ -
  • สำหรับ i ในช่วง 0 ถึง n ให้ทำ
    • ans :=สูงสุดของ ans, dfs(i)
  • คืนสินค้า

ตัวอย่าง (Python)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

class Solution:
   def solve(self, graph):
      ans = 0
      n = len(graph)
      table = [-1] * n
      def dfs(u):
         if table[u] != -1:
            return table[u]
         p_len = 0
         for v in graph[u]:
            p_len = max(p_len, 1 + dfs(v))
         table[u] = p_len
         return p_len
      for i in range(n):
         ans = max(ans, dfs(i))
      return ans
ob = Solution()
graph = [
   [1, 2],
   [3, 4],
   [],
   [4],
   [2],
]
print(ob.solve(graph))

อินพุต

graph = [[1, 2],[3, 4],[],[4],[2]]

ผลลัพธ์

4