Disappearance No.0

http://homepage3.nifty.com/pochomkin/Problems/disposezero.pdf
10マス並んだマス目に数字の書かれた石が複数置かれている。石は書かれている数だけ左右へ動かすことができ(端で反射)、ほかの石の上で止まったら数が合計されて1の位だけが書かれた新たな石になる。合計結果が0なら二つの石は消滅。与えられた石の並びを全消去する最短手順を求めるプログラムを書けと。
「最短手順を求めろ」と来ればこれは幅優先探索です。LinkedHashSet使えば一発じゃん、とJavaに乗り換えたかいあったと喜んでいたわけですが、書き上がったプログラムは暴走する。全然どこに問題があるのかわからなくて日中ずっと悩まされたわけですが、実はメソッドのオーバーライドの仕方の問題だった。
equals()を実装するには、引数は Object じゃないといけない。うっかり自分のクラスを引数にとってしまうと、一見正しくコンパイルできたように見えて、実は別のメソッドとして扱われてしまうのでオーバーライドしたことにならないのでした。
枝刈り技法も独自のやつを組み込んで何とか正常動作。でも・・・計算時間結構かかるなこれは。