Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm ra các cạnh làm ngắt kết nối đồ thị bằng Python

Giả sử chúng ta đã được cung cấp một đồ thị vô hướng đã được biểu diễn dưới dạng danh sách kề, trong đó đồ thị [i] đại diện cho các nút lân cận của nút i. Chúng ta phải tìm số cạnh thỏa mãn điều kiện sau.

Nếu cạnh bị loại bỏ, biểu đồ sẽ bị ngắt kết nối.

So, if the input is like graph = [
   [0, 2],
   [0, 4],
   [1, 2, 3],
   [0, 3, 4],
   [4],
   [3],
   [2]
],

thì đầu ra sẽ là 1.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Định nghĩa một hàm dfs (). Điều này sẽ diễn ra trong thời gian ngắn, trước, d

    • ans:=infinity

    • dep [curr]:=d

    • đối với mỗi điều từ trong biểu đồ [curr], thực hiện

      • nếu pre giống với adj thì

        • tiếp tục lặp lại tiếp theo mà không thực hiện các bước khác

      • nếu dep [adj] không giống với −1, thì

        • ans:=tối thiểu ans, dep [adj]

      • nếu không,

        • ans:=tối thiểu ans, dfs (adj, curr, d + 1)

    • nếu d> 0 và d <=ans thì

      • re:=re + 1

    • trả lại ans

  • Bây giờ, từ hàm chính, hãy gọi hàm dfs ().

  • dep:=danh sách kích thước của biểu đồ được khởi tạo bằng −1.

  • lại:=0

  • dfs (0, −1, 0)

  • trả lại

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

class Solution:
   def solve(self, graph):
      dep = [−1] * len(graph)
      INF = int(1e9)
      self.re = 0
      def dfs(curr, pre, d):
         ans = INF
         dep[curr] = d
         for adj in graph[curr]:
            if pre == adj:
               continue
            if dep[adj] != −1:
               ans = min(ans, dep[adj])
            else:
               ans = min(ans, dfs(adj, curr, d + 1))
         if d > 0 and d <= ans:
            self.re += 1
         return ans
      dfs(0, −1, 0)
      return self.re
ob = Solution()
print(ob.solve(graph = [
   [0, 2],
   [0, 4],
   [1, 2, 3],
   [0, 3, 4],
   [4],
   [3],
   [2]
]))

Đầu vào

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

Đầu ra

1