APL Dyalog, 27 ký tự
⊃⌽∨.∧⍨⍣≡1≥+/¨|∘.-⍨,(~×⍳∘⍴)⎕
⎕đánh giá đầu vào. APL phân biệt giữa ma trận và vectơ vectơ. Chương trình này giả định rằng đầu vào là một ma trận.
(~×⍳∘⍴)Alà một ngã ba tương đương với (~A) × ⍳⍴A. Cần tránh nhắc đến ⎕hai lần hoặc giới thiệu một biến.
⍴Alà hình dạng của A. Đối với ma trận 4 nhân 7, hình dạng là 4 7.
⍳là trình tạo chỉ số. ⍳4là 1 2 3 4. ⍳4 7là các vectơ (1 1)(1 2)...(4 7)được sắp xếp theo ma trận 4 nhân 7.
~Alật các bit của A.
×bằng cách nhân ⍳⍴Avới các bit bị lật, chúng ta bảo toàn tọa độ của tất cả các ô tự do và biến tất cả các bức tường thành 0 0.
,phá hủy ma trận của các cặp tọa độ, tức là tuyến tính hóa nó thành một vectơ. Trong trường hợp này, vectơ sẽ bao gồm các cặp.
∘.-⍨Ahoặc A∘.-Atrừ các yếu tố của Acặp đôi. Lưu ý rằng ở đây các yếu tố của Achính họ là cặp.
| giá trị tuyệt đối
+/¨tổng hợp từng cặp giá trị tuyệt đối. Điều này cho chúng ta khoảng cách lưới giữa mỗi cặp ô trong mê cung, tiết kiệm cho các bức tường.
1≥chúng tôi chỉ quan tâm đến hàng xóm ở khoảng cách không quá 1, điều này cũng không bao gồm các bức tường. Bây giờ chúng ta có một ma trận kề của đồ thị.
∨.∧⍨⍣≡ Floyd - Thuật toán đóng bắc cầu của Warshall
(f⍣n)A(không được sử dụng ở đây) trong đó nmột số nguyên là toán tử công suất. Nó áp dụng fcho A nthời gian : f f ... f A.
(f⍣g)Atrong đó glà một hàm, là toán tử điểm cố định, còn gọi là "giới hạn công suất". Nó giữ trên máy tính series A, f A, f f A, ... cho đến khi ((f⍣i)A) g ((f⍣(i+1))A)trở về đúng đối với một số i. Trong trường hợp này, chúng tôi sử dụng match ( ≡) là g.
∨.∧⍨Ahoặc A∨.∧Alà một bước trong thuật toán của Floyd. f.glà một khái quát của phép nhân ma trận ( +.×), ở đây chúng tôi sử dụng kết hợp ( ∧) và phân biệt ( ∨) thay cho +và ×.
⊃⌽ Sau khi ⍣≡đã áp dụng bước đủ thời gian và đạt đến trạng thái ổn định, chúng ta phải tìm góc trên bên phải của ma trận để có kết quả, vì vậy chúng ta lật nó ( ⌽) và lấy mục đầu tiên, trên cùng bên trái ( ⊃).
Hình dung các ⍣≡bước của