Từ ô giữa đến một trong hai góc
Với m hàng, n cột, chọn x=n//2 và y=m//2 theo cách lấy phần nguyên. Ví dụ mê cung 3 hàng 6 cột chọn (x=3,y=1). Với kích thước chẵn có nhiều ô gần giữa; đây là ô giữa theo quy ước của phép chia nguyên.
Đích có thể là góc trái trên (0,0) hoặc góc phải dưới (n−1,m−1). Truyền goals chứa cả hai cặp tọa độ vào solveMaze; ô hiện tại phải trong lưới, mở và chưa nằm trong đường trước khi được công nhận là đích.
```text
python3 g11-cs-me-cung.py g11-cs-me-cung.inp --giua --output giua.out
```
Với mẫu 4×5, xuất phát (2,2); hướng phải dẫn đến (4,3). Nếu điểm xuất phát là tường thì không có đường từ điểm ấy, không tự chuyển sang một ô khác.
Tạo bản hiển thị sau tìm kiếm
```python
def wall_view(maze, sol, mark_walls=False):
return [['x' if mark_walls and maze[y][x] == 1 else sol[y][x]
for x in range(len(row))] for y, row in enumerate(maze)]
```
Khi mark_walls=True, ô maze bằng 1 hiện thành chữ x; các ô còn lại giữ dấu 0/1 của sol. Hàm tạo một ma trận mới nên không thay tường trong maze hoặc dấu vết số trong sol.
```text
python3 g11-cs-me-cung.py g11-cs-me-cung.inp --giua --danh-tuong --output giua.out
```
Cần nhận x đúng các vị trí tường của tệp đầu vào, 1 trên đường và 0 ở các ô mở còn lại. Không dùng chữ x làm dấu đang đi trong thuật toán vốn kiểm sol bằng 0/1.
Bài luyện
Mê cung 3 hàng 6 cột chọn ô giữa theo công thức trên ở đâu?
Đây là góc trái trên.
x=6//2 và y=3//2.
Đã đổi hàng với cột, y=3 còn vượt biên.
Đây không phải chỉ số trong lưới.
Lời giải
x là cột nên lấy n//2=6//2=3; y là hàng nên lấy m//2=3//2=1. Cặp đúng là (3,1).
Bài luyện
Đích được cho là một trong hai góc. Khi cần đọc maze[y][x], điều gì phải kiểm trước?
y==0 chưa đủ kiểm cột.
Góc vẫn có thể là tường.
Sau đó mới đọc ô và kiểm điều kiện đích.
x==0 chưa xác định vị trí hợp lệ.
Lời giải
Các lời gọi thử hướng có thể vượt biên. Kiểm tọa độ trước khi đọc ma trận, rồi xác nhận ô mở và thuộc tập đích; không hoán đổi thứ tự này.
Bài luyện
Vì sao nên tạo bản hiển thị x thay vì sửa maze khi in?
Tường vẫn không được đi.
sol vẫn cần dấu 0/1.
Vị trí xuất phát do yêu cầu xác định.
Hiển thị và trạng thái tìm kiếm có vai trò riêng.
Lời giải
maze lưu cấu trúc lưới, sol lưu dấu vết bằng số. wall_view tạo kết quả trình bày mới với x ở tường, giữ hai ma trận gốc để còn đối chiếu hoặc chạy lại.
Đang học