Trước hết, bạn không cần Dijkstra, bởi vì tất cả các giá trị của các cạnh đều giống nhau. Bạn có thể sử dụng thuật toán đơn giản BFS hoặc DFS. Trường hợp phức tạp tồi tệ nhất là như nhau nhưng tôi sẽ sử dụng BFS vì nó có độ phức tạp trung bình tốt hơn. Tuy nhiên, O (| V | + | E |) là nhanh nhất bạn có thể nhận được ở đây và nó đã được chứng minh.
Làm cách nào để biểu đồ của bạn được thể hiện? Cách tốt nhất là giữ một danh sách các hàng xóm cho mỗi Node
. Dấu chấm đen từ ví dụ của bạn không được tính là hàng xóm. Vì vậy, trong ví dụ của bạn, mỗi nút sẽ có 0 (được bao phủ bởi các dấu chấm đen) cho 6 người hàng xóm. Sau đó, bạn có thể đến bất cứ nơi nào bạn có thể nhận được từ bất kỳ điểm nút nào thông qua các danh sách này.
Thuật toán BFS có thuộc tính mà nó gán cho mỗi nút một lớp, có nghĩa là nó cách xa nút khởi đầu. Bạn bắt đầu từ điểm bắt đầu của bạn và lớp hiện tại của bạn sẽ là 0. Sau đó, bạn chỉ cần làm theo tất cả các nút từ một lớp hiện tại (thường được giữ ở hàng đợi) và cố gắng tìm hàng xóm của nó (từ danh sách những người hàng xóm), không có lớp được chỉ định và bạn gán cho họ +1 lớp cao hơn.Một khi bạn tìm thấy nút của bạn, (mà vẫn có thể có x, y làm thuộc tính để kiểm tra đường viền (hoặc đường viền bool thuộc tính)), ở biên giới mê cung của bạn, bạn biết nó ở xa giá trị lớp của bạn. Nếu bạn muốn in một cách chính xác, bạn chỉ phải tìm cách quay trở lại (thông qua danh sách các hàng xóm của bạn) mà đáp ứng các điều kiện mà mỗi bước là ở lớp -1 thấp hơn. Điều này sẽ in theo cách từ đầu đến cuối, nhưng tôi chắc chắn bạn sẽ nhận được kết quả của mình với một chút trợ giúp từ cấu trúc dữ liệu Stack
:)
Nguồn
2015-11-13 13:52:37
Điều gì cấu thành "đường dẫn"? Bạn có thể cho một số ví dụ? Upvote về câu hỏi để bao gồm một hình ảnh đẹp. –
chính xác điều này có nghĩa là gì? Điểm đến - Ranh giới của ma trận [có nghĩa là x = 0 hoặc y = 0 hoặc x = 9 hoặc y = 9] 9 di chuyển thành công? –
xem ví dụ trong chỉnh sửa. chấm đỏ phải đạt tới ranh giới của mê cung. – jpm