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

Chương trình Python để tìm tất cả các nút có thể truy cập từ một nút bằng cách sử dụng BFS trong một đồ thị

Khi được yêu cầu tìm tổng tất cả các nút của cây, một lớp sẽ được tạo và nó chứa các phương thức để đặt nút gốc, thêm các phần tử vào cây, tìm kiếm một phần tử cụ thể và thêm các phần tử của cây vào tìm tổng và như vậy. Một phiên bản của lớp có thể được tạo để truy cập và sử dụng các phương thức này.

Dưới đây là một minh chứng về điều tương tự -

Ví dụ

from collections import deque

def add_edge(v, w):

   global visited_node, adj
   adj[v].append(w)
   adj[w].append(v)

def BFS_operation(component_num, src):

   global visited_node, adj
   queue = deque()

   queue.append(src)

   visited_node[src] = 1
   reachableNodes = []

   while (len(queue) > 0):

      u = queue.popleft()
      reachableNodes.append(u)
      for itr in adj[u]:
         if (visited_node[itr] == 0):

            visited_node[itr] = 1
            queue.append(itr)

   return reachableNodes

def displayReachableNodes(m):

   for i in m:
      print(i, end = " ")
   print()

def findReachableNodes(my_list, n):

   global V, adj, visited_node

   a = []

   component_num = 0

   for i in range(n):
      u = my_list[i]

      if (visited_node[u] == 0):
         component_num += 1

      a = BFS_operation(component_num, u)

   print("The reachable nodes from ", u, " are")
   displayReachableNodes(a)

V = 7
adj = [[] for i in range(V + 1)]
visited_node = [0 for i in range(V + 1)]
add_edge(1, 2)
add_edge(2, 3)
add_edge(3, 4)
add_edge(3, 1)
add_edge(5, 6)
add_edge(5, 7)

my_list = [ 2, 4, 5, 7 ]

arr_len = len(my_list)
findReachableNodes(my_list, arr_len)

Đầu ra

The reachable nodes from 2 are
2 1 3 4
The reachable nodes from 4 are
2 1 3 4
The reachable nodes from 5 are
5 6 7
The reachable nodes from 7 are
5 6 7

Giải thích

  • Các gói bắt buộc được nhập.

  • Một phương thức có tên là ‘add_edge’ được định nghĩa để giúp thêm các phần tử vào cây.

  • Phương thức 'BFS_operation' giúp duyệt qua cây bằng cách sử dụng phương pháp tìm kiếm đầu tiên theo chiều rộng.

  • Một phương thức có tên ‘displayReachableNodes’ được xác định, giúp hiển thị các nút có thể truy cập được từ một nút cụ thể.

  • Một phương thức có tên ‘findReachableNodes’ được xác định, phương thức này sẽ lặp lại qua các nút và thực hiện ‘BFS_operation’ trên các phần tử.

  • Phương thức ‘add_edge’ thêm các nút vào biểu đồ.

  • Một danh sách được xác định và hiển thị trên bảng điều khiển.

  • Phương thức được gọi và đầu ra được hiển thị trên bảng điều khiển.