>>218
初歩的すぎるが、暇なので擬似コード書いてみた。

すべてのマスに対応する移動可能残量ワークを用意。ゼロ初期化。
でスタート

関数(位置, 移動可能残量)
{
 位置が障害物なら何もしないでリターン
 移動可能残量でその位置に入れないのならリターン

 移動可能残量 -= このマスに入るのに必要な消費量

 その位置のワークにすでに移動可能残量以上の値が入っていたらリターン

 その位置のワークに移動可能残量を記入

 if ( 移動可能残量がまだある ) {
  関数(上, 移動可能残量)
  関数(下, 移動可能残量)
  関数(左, 移動可能残量)
  関数(右, 移動可能残量)
 }
}

これで
関数(Aの位置, B)した結果のワークが0でないところが移動可能範囲として描画できる。

たどるべき最短ルートは、任意のポイントのワークの数字を読んで
その隣の数字が大きくなる方向をたどっていけばAまで到達できる。