ネットで調べたけど、
流れとしては

まずは上下左右の情報とって
移動出来たらそのマスにフラグつけて
また3方向調べるのを繰り返す

処理の途中で、フラグがついてるマスに当たったら処理を止めて
処理の分岐点まで戻る
(その際、既にあるフラグと
 今考えているフラグのどちらが短い歩数かを比べる)

1つ先のマスを調べる度に
移動可能な歩数を入れた変数から、地形毎の値を引いて、0かそれ未満なら処理を分岐点まで戻す

壁とかの移動不可のマスは
移動に必要な歩数を極端に高く設定する

でおk?