>366
outputとcleanupを分かりやすいものに差し替えて同じ場所にうpってある、と言うのを忘れてた。
元々のソースはイマイチなんで、新しい方見てくれ。うpろだ84番。

仮想壁は迷路の外周(1行目とか1列目)に壁でないマスがある場合の用心。
外周が常に壁である事がルールで保証されてるなら不要。

#define PATH 4
とかはマクロ。プログラム中のPATHという単語が全て4に置換される。
イメージとしては変数のようなもの。プログラム中に数字が出てくるよりは多少見やすいだろ。

アルゴリズムを一応解説。visit。
スタートから一歩ごとに値(step)を1増やしつつ、通ったマスにstepをセットして行ってる。
新しいバージョンのプログラムを見ると、最短ルート上に数字が順に並んでるのが分かると思う。

visitの冒頭の条件式。値がセットしてあるところはもうルートとして探索し終えた場所って事なので探索終了。
ただし、その時点でのstepの方が小さいなら、同じ場所により早くたどり着いたって事なので探索続行。
あと、184では移動直前に壁かどうかの判定を行なっていたのも、移動直後に変更。
こっちはちょっときれいに見える以上の深い意味はない。趣味の域だな。

cleanupはまずゴールから初めて最短ルートを4で塗りつぶしてる。
その後、関係ない道を0で埋めてる(この処理は変更後のプログラムで追加)。