X

Chuyên đề Tin 12 Kết nối tri thức

Viết chương trình in ra thứ tự các đỉnh đã được duyệt bằng thuật toán DFS theo cả hai cách


Viết chương trình in ra thứ tự các đỉnh đã được duyệt bằng thuật toán DFS theo cả hai cách đệ quy và không đệ quy, áp dụng cho đồ thị có hướng Hình 14.1b trong phần Khởi động.

Giải Chuyên đề Tin 12 Bài 14: Kĩ thuật duyệt đồ thị theo chiều sâu - Kết nối tri thức

Vận dụng 1 trang 71 Chuyên đề Tin học 12: Viết chương trình in ra thứ tự các đỉnh đã được duyệt bằng thuật toán DFS theo cả hai cách đệ quy và không đệ quy, áp dụng cho đồ thị có hướng Hình 14.1b trong phần Khởi động.

Lời giải:

Chương trình Python mô phỏng thuật toán DFS theo cả hai cách đệ quy và không đệ quy:

* Đệ quy (Recursive):

def DFS_recursive(graph, vertex, visited=None):

    if visited is None:

       visited = set()

   visited.add(vertex)

   print(vertex, end=' ')

    for neighbor in graph[vertex]:

       if neighbor not in visited:

           DFS_recursive(graph, neighbor, visited)

# Ví dụ sử dụng:

graph = {

    0: [1, 2],

    1: [3],

    2: [4],

    3: [],

    4: [5],

    5: [3],

    6: [5],

    7: [6]

}

DFS_recursive(graph, 0)

* Không đệ quy (Non-recursive):

def DFS_non_recursive(graph, start_vertex):

    visited = set()

    stack = [start_vertex]

    while stack:

        vertex = stack.pop()

        if vertex not in visited:

            print(vertex, end=' ')

            visited.add(vertex)

            # Thêm vào ngăn xếp các đỉnh kề chưa được thăm

            stack.extend([neighbor for neighbor in graph[vertex] if neighbor not in visited])

# Ví dụ sử dụng:

graph = {

    0: [1, 2],

    1: [3],

    2: [4],

    3: [],

    4: [5],

    5: [3],

    6: [5],

    7: [6]

}

DFS_non_recursive(graph, 0)

Lời giải bài tập Chuyên đề Tin 12 Bài 14: Kĩ thuật duyệt đồ thị theo chiều sâu hay, ngắn gọn khác:

Xem thêm lời giải bài tập Chuyên đề học tập Tin học 12 Kết nối tri thức hay, ngắn gọn khác: