Hai ma trận có hai ý nghĩa
Hình so sánh cùng một lưới trước và sau tìm kiếm; cần đọc số 0/1 theo tên ma trận.
Mê cung có m hàng, n cột; maze lưu dữ liệu đầu vào: 0 là ô đi được, 1 là tường. Chỉ đi sang một ô kề cạnh, không đi chéo. Bài toán ban đầu tìm **một đường** từ góc trái trên đến góc phải dưới.
Tọa độ (x,y) dùng x cho cột, y cho hàng, đều bắt đầu từ 0. Vì ma trận được đọc theo từng hàng, ô hiện tại là maze[y][x]. Với m=4,n=5, đích là (4,3), không phải (3,4). Ma trận sol cùng kích thước, ban đầu toàn 0; sau khi tìm thành công, 1 đánh dấu các ô thuộc đường, 0 là phần còn lại.
Đọc từng dòng rồi kiểm hình chữ nhật
```python
def readmaze(path):
maze = []
with open(path, encoding='utf-8') as file:
for line in file:
row = [int(value) for value in line.split()]
if not row or any(value not in (0, 1) for value in row):
raise ValueError('Mỗi dòng cần có các số0 hoặc1, cách nhau bởi dấu cách.')
maze.append(row)
if not maze or any(len(row) != len(maze[0]) for row in maze):
raise ValueError('Mê cung cần là ma trận chữ nhật khác rỗng.')
return maze
```
Mỗi dòng tệp chứa các số 0/1 cách nhau bằng dấu cách. split tách các giá trị, int đổi thành số và append thêm một hàng. Sau khi đọc, các hàng phải dài bằng nhau và dữ liệu khác rỗng để len(maze[0]) dùng được.
Tệp mẫu có 4 hàng, mỗi hàng 5 số. Hàm báo lỗi nếu có dòng trống, số khác 0/1 hoặc hàng dài ngắn khác nhau. Đây là kiểm dữ liệu đầu vào, không phải các nhánh của thuật toán tìm đường.
Bài luyện
Ô (x=3,y=1) được đọc bằng biểu thức nào?
Đã đổi chỗ hàng và cột.
Đã thay hàng bằng cột.
Đã thay cột bằng hàng.
Chỉ số hàng đứng trước, chỉ số cột đứng sau.
Lời giải
x là cột 3, y là hàng 1. Ma trận lưu theo hàng nên trước hết lấy maze[1], sau đó phần tử cột 3: maze[1][3].
Bài luyện
Số 1 trong maze và số 1 trong sol có cùng ý nghĩa không?
Phải phân biệt vai trò hai ma trận.
Vết đường chỉ đi trên ô maze bằng 0.
maze bằng 1 không được đi.
sol ghi dấu vết, không ghi chỉ số hàng.
Lời giải
maze mô tả lưới cố định với 0 là ô mở và 1 là tường. sol lưu kết quả tìm kiếm với 1 là ô trên đường đi. Không thể đổi vai trò hai dãy chỉ vì cùng dùng số 0/1.
Bài luyện
Mê cung 4 hàng, 5 cột có đích góc phải dưới ở đâu?
Đây là điểm xuất phát ban đầu.
Cột cuối là n−1, hàng cuối là m−1.
Đã đảo số hàng và cột.
Chỉ số đó vượt biên.
Lời giải
Các cột có chỉ số 0…4, các hàng có chỉ số 0…3. Góc phải dưới thuộc cột 4,hàng 3 nên tọa độ là (4,3).
Đang học