Tôi đang làm việc này vào lúc này ... Bắt đầu từ một cạnh, tôi ngẫu nhiên đi qua một mảng vuông, đánh dấu các ô có độ dài đường đi khi tôi đi qua chúng.
Khi bạn gặp khó khăn (và bạn sẽ), hãy tạo một đường giao nhau hình thành một vòng lặp với đường dẫn gần nhất gần bạn (nhưng xem bên dưới). Sau đó tôi quay trở lại theo con đường hiện tại đến phía bên kia của ngã ba và phá vỡ vòng lặp đó. Đuôi lủng lẳng này sau đó tạo thành 'đầu' mới của bước đi ngẫu nhiên (nhớ tính toán lại độ dài đường dẫn của bạn từ nguồn đường dẫn) và bạn có thể tiếp tục.
Thử nghiệm cho thấy rằng bằng cách thực hiện điều này không (hoặc chưa xem - xem bên dưới) đã tạo ra một vòng tạo đuôi mới, miễn là 'đuôi' mới của bạn bị mắc kẹt, bạn không chỉ không ngừng tái tạo một liên kết với ô mà bạn vừa mới tách ra nếu đó là lần gần đây nhất - chọn lần thứ hai gần đây nhất trong trường hợp đó.
Trường hợp chấm dứt là khi bạn bị 'kẹt' trên phần tử cạnh, và bạn đã điền mảng (chiều dài đường dẫn của bạn giống với vùng của mảng) - bạn đã hoàn tất. Điểm xuất phát của bạn dẫn đến điểm kết thúc.
Có vẻ như có hai sự thiếu hiệu quả và trục trặc tiềm năng với điều này (Tôi đang chơi với thuật toán tại thời điểm này) - Đôi khi bạn sẽ đi vào một góc và cách duy nhất để tiếp tục là tạo lại vòng lặp liên kết với trang bạn vừa mới hỏng. Sau đó, trình tự quay trở lại theo dõi tất cả các vòng bạn đã thực hiện trước đó tại điểm mà ban đầu bạn bị kẹt. Nếu rằng không thể đi bất cứ nơi nào khác (nó là một góc khác) sau đó bạn sẽ chỉ trả lại giữa hai người. Có nhiều cách xung quanh điều đó, nhưng nó có nghĩa là giữ một số loại danh sách các ô được lặp lại, chỉ xóa nó khi bạn thực sự nằm xuống một số đường dẫn mới.
Cách khác là dường như dễ bị bỏ trống một hình vuông lẻ, đặc biệt khi mảng của bạn là lẻ-lẻ. Tôi đã không hoàn toàn điều tra tại sao đây là trường hợp, và đó là khi điều này xảy ra rằng vấn đề góc trước đó có vẻ đặc biệt phổ biến.Công việc tiếp tục ...
là có bất kỳ hạn chế, ví dụ không có hình vuông đen 2x2? –
@Lie Ryan: Không. Mặc dù sẽ rất tuyệt khi có các thuật toán như vậy trong số các câu trả lời. – Fejuto
Liên quan: http://stackoverflow.com/questions/2641964/algorithm-to-generate-a-segment-maze – nico