python-019Đọc toàn bộ đề miễn phí

Tìm đường đi ngắn nhất trên đồ thị bằng BFS

Hệ thống mạng truyền thông giữa các máy chủ AI tại AI Empire Academy gồm n nút mạng được đánh số từ 0 đến n - 1. Các liên kết hai chiều giữa các máy chủ được biểu diễn dưới dạng da…

PythonNâng cao25 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

graphsbfsshortest pathqueue

Kiến thức tiên quyết: graph adjacency list, bfs algorithm, deque.

Nội dung đề bài

Mục tiêu kiến thức

  • Xây dựng danh sách kề (Adjacency List) từ danh sách cạnh của đồ thị vô hướng.
  • Thuật toán Tìm kiếm theo chiều rộng (BFS) đảm bảo tìm đường đi có số cạnh ít nhất trên đồ thị không trọng số.
  • Kỹ thuật truy vết đường đi bằng mảng / từ điển parent.

Mô tả bài toán

Hệ thống mạng truyền thông giữa các máy chủ AI tại AI Empire Academy gồm n nút mạng được đánh số từ 0 đến n - 1. Các liên kết hai chiều giữa các máy chủ được biểu diễn dưới dạng danh sách cạnh edges.

Hãy viết hàm shortest_path_unweighted(n: int, edges: list[tuple[int, int]], start: int, target: int) -> list[int] | None tìm đường đi ngắn nhất (chứa ít cạnh nhất) từ nút start đến nút target.

Quy tắc:

  • Trả về danh sách thứ tự các nút trên đường đi bắt đầu từ start và kết thúc tại target (ví dụ: [start, v1, v2, target]).
  • Nếu start == target, trả về [start].
  • Nếu có nhiều đường đi có cùng độ dài ngắn nhất, ưu tiên chọn đỉnh kề có chỉ số nhỏ hơn trước (duyệt danh sách kề theo thứ tự tăng dần).
  • Nếu không có đường đi nào giữa hai nút, trả về None.

Input

  • n: Số lượng đỉnh nguyên dương.
  • edges: Danh sách các cạnh (u, v).
  • start: Đỉnh xuất phát (0 ≤ start < n).
  • target: Đỉnh đích (0 ≤ target < n).

Output

Danh sách các đỉnh list[int] trên đường đi ngắn nhất, hoặc None.

Ràng buộc

  • 1 ≤ n ≤ 104.
  • 0 ≤ len(edges) ≤ 5 · 104.
  • Thời gian chạy tối đa: 1000ms.
  • Giới hạn bộ nhớ: 256MB.

Ví dụ 1

Input

`n = 5, edges = [(0, 1), (0, 2), (1, 3), (2, 3), (3, 4)], start = 0, target = 4`

Output

`[0, 1, 3, 4]`

Giải thích

Từ 0 đến 4 có hai đường đi ngắn nhất độ dài 3 cạnh: 0-1-3-4 và 0-2-3-4. Vì 1 < 2 nên chọn đỉnh 1 trước ⇒ Đường đi là [0, 1, 3, 4].

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.