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

Thuật toán tìm kiếm A* (A-Star) trên lưới tọa độ với Heuristic Manhattan

Cho một mê cung dạng ma trận grid kích thước R × C, trong đó ô có giá trị 0 là đường đi tự do và 1 là vật cản không thể đi vào.

PythonNâng cao35 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ủ đề

a stargraphsheuristicpathfinding

Kiến thức tiên quyết: dijkstra, priority queue.

Nội dung đề bài

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

  • Triển khai thuật toán tìm đường A* (A-Star Search).
  • Kết hợp hàm chi phí thực tế g(n) và hàm đánh giá heuristic h(n) với f(n) = g(n) + h(n).
  • Sử dụng hàm Heuristic khoảng cách Manhattan |r1 - r2| + |c1 - c2| cho di chuyển 4 hướng (Lên, Xuống, Trái, Phải).

Mô tả bài toán

Cho một mê cung dạng ma trận grid kích thước R × C, trong đó ô có giá trị 0 là đường đi tự do và 1 là vật cản không thể đi vào.

Viết hàm a_star_grid_path(grid: list[list[int]], start: tuple[int, int], goal: tuple[int, int]) -> tuple[int, list[tuple[int, int]] | None]:

  • start và goal là tọa độ (row, col).
  • Nếu start hoặc goal nằm ngoài mê cung hoặc nằm trúng ô vật cản (grid[r][c] == 1), raise ValueError("Toa do start hoac goal khong hop le").
  • Di chuyển theo 4 hướng chính, mỗi bước đi tốn chi phí 1.
  • Trả về (min_steps, path):
  • min_steps: số bước đi ngắn nhất từ start đến goal. Nếu start == goal, min_steps = 0 và path = [start].
  • path: danh sách các tọa độ đi từ start đến goal.
  • Nếu không tồn tại đường đi, trả về (-1, None).

Input

  • Tham số: grid: list[list[int]], start: tuple[int, int], goal: tuple[int, int].

Output

  • Trả về: tuple[int, list[tuple[int, int]] | None].
  • Ngoại lệ: ValueError khi tọa độ không hợp lệ hoặc trúng vật cản.

Ràng buộc

  • Thời gian chạy tối đa: 1000ms.
  • Giới hạn bộ nhớ: 256MB.
  • Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.

Ví dụ 1

Input

a_star_grid_path([[0, 0, 0], [0, 1, 0], [0, 0, 0]], [0, 0], [2, 2])

Output

[4, [[0, 0], [0, 1], [0, 2], [1, 2], [2, 2]]]

Giải thích

Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.

Ví dụ 2

Input

a_star_grid_path([[0, 1], [1, 0]], [0, 0], [1, 1])

Output

[-1, None]

Giải thích

Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.

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.