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.

Vận dụng

1. 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.


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)


Giải những bài tập khác

Bình luận

Giải bài tập những môn khác