Dyalog APL, 27 karakter
⊃⌽∨.∧⍨⍣≡1≥+/¨|∘.-⍨,(~×⍳∘⍴)⎕
⎕
input yang dievaluasi. APL membedakan antara matriks dan vektor vektor. Program ini mengasumsikan bahwa input adalah sebuah matriks.
(~×⍳∘⍴)A
adalah garpu yang setara dengan (~A) × ⍳⍴A
. Ini diperlukan untuk menghindari menyebutkan ⎕
dua kali atau memperkenalkan variabel.
⍴A
adalah bentuk A
. Untuk matriks 4-oleh-7 bentuknya adalah 4 7
.
⍳
adalah generator indeks. ⍳4
adalah 1 2 3 4
. ⍳4 7
adalah vektor (1 1)(1 2)...(4 7)
disusun dalam matriks 4-oleh-7.
~A
membalik bit A
.
×
dengan mengalikan ⍳⍴A
dengan bit yang dibalik, kami menjaga koordinat semua sel bebas dan mengubah semua dinding menjadi 0 0
.
,
putar matriks pasangan koordinat, yaitu linearkan menjadi vektor. Dalam hal ini vektor akan terdiri dari pasangan.
∘.-⍨A
atau A∘.-A
kurangi elemen A
berpasangan. Perhatikan bahwa di sini elemen dari A
pasangan itu sendiri berpasangan.
|
nilai mutlak
+/¨
jumlah setiap pasangan nilai absolut. Ini memberi kita jarak grid antara setiap pasangan sel di labirin, kecuali untuk dinding.
1≥
kami hanya tertahan di tetangga pada jarak tidak lebih dari 1, ini juga tidak termasuk dinding. Sekarang kita memiliki matriks adjacency grafik.
∨.∧⍨⍣≡
Floyd - Algoritma penutupan transitif Warshall
(f⍣n)A
(tidak digunakan di sini) di mana n
bilangan bulat adalah operator daya. Ini berlaku f
untuk A
n
kali: f f ... f A
.
(f⍣g)A
di mana g
fungsi, adalah operator titik tetap, alias "batas daya". Itu terus komputasi seri A
, f A
, f f A
, ... sampai ((f⍣i)A) g ((f⍣(i+1))A)
kembali benar untuk beberapa i
. Dalam hal ini kami menggunakan kecocokan ( ≡
) sebagai g
.
∨.∧⍨A
atau A∨.∧A
merupakan langkah dalam algoritma Floyd. f.g
adalah generalisasi dari perkalian matriks ( +.×
), di sini kami menggunakan kata hubung ( ∧
) dan disjungsi ( ∨
) sebagai ganti dari +
dan ×
.
⊃⌽
Setelah ⍣≡
menerapkan langkah cukup lama dan mencapai kondisi stabil, kita harus mencari sudut kanan atas matriks untuk mendapatkan hasilnya, jadi kita balikkan ( ⌽
) dan ambil item pertama, kiri atas ( ⊃
).
Visualisasi ⍣≡
langkah-langkahnya