Giải chuyên đề Tin 12 Cánh diều Bài 5: Thực hành duyệt đồ thị có đáp án

36 người thi tuần này 4.6 144 lượt thi 2 câu hỏi

🔥 Đề thi HOT:

864 người thi tuần này

15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 19 có đáp án

5.6 K lượt thi 15 câu hỏi
575 người thi tuần này

15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 23 có đáp án

2.6 K lượt thi 15 câu hỏi
413 người thi tuần này

15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 24 có đáp án

1.9 K lượt thi 15 câu hỏi
401 người thi tuần này

15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 22 có đáp án

2.5 K lượt thi 15 câu hỏi
400 người thi tuần này

Trắc nghiệm tổng hợp Tin học năm 2023 có đáp án (Phần 4)

4.4 K lượt thi 217 câu hỏi
369 người thi tuần này

15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 25 có đáp án

1.4 K lượt thi 15 câu hỏi
318 người thi tuần này

15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 20 có đáp án

2.5 K lượt thi 15 câu hỏi
315 người thi tuần này

15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 16 có đáp án

2.9 K lượt thi 15 câu hỏi

Nội dung liên quan:

Danh sách câu hỏi:

Lời giải

Dùng măng hàng đợi Q đề thăm các đỉnh theo chiều rộng, máng level để ghi nhận nhóm nghi nhiễm, Hình 2, 3, 4 mô tá ba bước đầu tiên trong quá trình thực hiện.

Mã giả để thực hiện nhiệm vụ phân nhóm người nghi nhiễm COVID-19 bằng thuật toán duyệt đồ thị theo chiều rộng (BFS):

from collections import deque

# Biểu diễn đồ thị bằng danh sách kề

graph = {

   0: [1, 2],

   1: [0, 3],

   2: [0, 4, 5],

   3: [1, 6],

   4: [2],

   5: [2],

   6: [3]

}

# Hàm thực hiện BFS để phân nhóm

def bfs_covid_contact_tracing(graph, start):

   # Khởi tạo hàng đợi và danh sách nhóm

   queue = deque([start])

   levels = {start: 'FO'}  # Người 0 thuộc nhóm FO

   visited = {start}

   # Duyệt đồ thị

   while queue:

        vertex = queue.popleft()

        for neighbour in graph[vertex]:

            if neighbour not in visited:

                visited.add(neighbour)

                queue.append(neighbour)

                # Phân nhóm dựa trên nhóm của người tiếp xúc

                levels[neighbour] = 'F1' if levels[vertex] == 'FO' else 'F2'

   return levels

# Gọi hàm và in kết quả

levels = bfs_covid_contact_tracing(graph, 0)

for person, level in levels.items():

   print(f'Người {person} thuộc nhóm {level}')

Lời giải

Xây dựng đồ thị, đánh số các ô trong mê cung (Hình 6), mỗi ô tương ứng

một đỉnh của đồ thị, hai ô kể cạnh có cạnh nối. Theo như Hình 6, đồ thị có 50 đỉnh. Duyệt đồ thị theo chiều sâu bắt đầu từ ô số 1 theo thứ tự ưu tiên đi theo ô xuống dưới, sang phải, lên trên, sang trái.

Bài toán Tìm đường đi trong mê cung  Nam đang chơi trò chơi tìm đường đi trong mê cung như trong Hình 5. Dùng thuật toán duyệt đồ thị theo chiều sâu đề kiểm tra: Nam có thể đi vào mê cung từ góc trái trên và ra khỏi mê cung ở góc phải dưới hay không ? (ảnh 2)

Mã giả để giải bài toán tìm đường đi trong mê cung sử dụng thuật toán duyệt đồ thị theo chiều sâu (DFS):

def dfs(maze, start, end):

    stack = [(start, [start])]

    visited = set()

    while stack:

        (vertex, path) = stack.pop()

        if vertex in visited:

            continue

       visited.add(vertex)

        for neighbor in get_neighbors(maze, vertex):

            if neighbor == end:

                return path + [end]

           stack.append((neighbor, path + [neighbor]))

    return None

def get_neighbors(maze, cell):

    # Giả sử hàm này trả về danh sách các ô kề cạnh có thể đi được từ ô hiện tại

    pass

# Giả sử maze là một mảng hai chiều biểu diễn mê cung, start và end là vị trí bắt đầu và kết thúc

path = dfs(maze, start, end)

if path:

    print("Có đường đi từ góc trái trên đến góc phải dưới.")

else:

    print("Không có đường đi.")

Lưu ý

Cần xác định cấu trúc dữ liệu maze phù hợp và viết hàm get_neighbors để lấy các ô kề cạnh có thể đi được từ một ô bất kỳ trong mê cung. Mã giả trên chỉ là khung sườn cơ bản, bạn cần điều chỉnh để phù hợp với dữ liệu cụ thể của bài toán bạn đang giải quyết. Đồ thị mê cung cụ thể cần được xây dựng dựa trên hình ảnh mê cung bạn có.


 

4.6

29 Đánh giá

50%

40%

0%

0%

0%