経路探索の補足
プログラムのしくみ
link(地点1, 地点2). は、地点1と2が繋がっていることを示す。
path(地点1, 地点2). は、地点1と地点2の間で行き来が出来ることを示す。
pathFind(現在地, 目的地, 通行済み経路, これから通る経路) は、
現在地が既に通行済みでないなら、
現在地を通行済み経路に加え、
一つ先に進み、
残りの経路を探索する
というように定義されている。
田んぼの田の字を経路探索
「田」の字の 角 から 角 へ渡る経路のパターンは意外に多く、12パターンある。
経路探索の様子
現在位置 a
ゴール g
通過地点 []
ゴールまでの経路 []
a→b 通路発見
現在位置 b
ゴール g
通過地点 [a]
ゴールまでの経路 [a]
b→a 通路発見 → a 通過済み → 別経路探索
b→d 通路発見
現在位置 d
ゴール g
通過地点 [b a]
ゴールまでの経路 [a b]
d→b 通路発見 → b 通過済み → 別経路探索
d→f 通路発見
現在位置 f
ゴール g
通過地点 [d b a]
ゴールまでの経路 [a b d]
f→d 通路発見 → d 通過済み → 別経路探索
f→g 通路発見
現在位置 g
ゴール g
通過地点 [f d b a]
ゴールまでの経路 [a b d f]
現在位置 と ゴール が一致 → ゴールまでの経路 [a b d f g]
f→h 通路発見
現在位置 h
ゴール g
通過地点 [f d b a]
ゴールまでの経路 [a b d f]
h→f 通路発見 → f 通過済み → 別経路探索
h→g 通路発見
現在位置 g
ゴール g
通過地点 [h f d b a]
ゴールまでの経路 [a b d f h]
現在位置 と ゴール が一致 → ゴールまでの経路 [a b d f h g]
a→c 通路発見
現在位置 c
ゴール g
通過地点 [a]
ゴールまでの経路 [a]
c→a 通路発見 → a 通過済み → 別経路探索
c→e 通路発見
現在位置 e
ゴール g
通過地点 [c a]
ゴールまでの経路 [a c]
e→c 通路発見 → c 通過済み → 別経路探索
全経路探索終了