油分け算


●グラフの特徴
(1)大マスと中マス間の移動
 横線:x軸に平行で、端から端まで移動。
(2)大マスと小マス間の移動
 縦線:y軸に平行で、端から端まで移動。
(3)中マスと小マス間の移動
 斜め線:直線x+y=k(定数)の端から端まで移動。
(4)状態の点は、領域の境界線上にある。
 領域:0≦x≦中マスの容量、0≦y≦小マスの容量

●最小手順を発見する方法
(1)原則、大から中、中から小、小から大、大から中、中から小、小から大、・・・の順に移し替えを行う。
 グラフでは、右、斜め(左上)、下、右、斜め、下、・・・となる。
(2)もし上の手順を行っていって、同じ状態に戻ってしまう場合は、一つ飛ばして移動する。
 たとえば、上記の最小手順のグラフ(1番目の例)において、Step[4]で、[1]右、[2]斜め、[3]下ときたから、次は、右と行きたいところですが、同じ状態に戻るので、[4]斜めに移動します。Step[5]も同様、斜めの次は下と行きたいところですが、同じ状態に戻るので、[5]右に移動。以降は、原則に従って、右の次は、[6]斜め、[7]下。

※参考URL
http://q.hatena.ne.jp/1283609377
油分け算の問題をJavaで解いてみた。
知恵袋の油分け算の問題をPythonで解いてみた。