07/07/03 00:58:11
>>715
1の方はできているということで2のヒントだけ。
一度通った座標を記録して、
さいころを振って次の座標を決めたときに、記録にその座標があったら振りなおす。
座標の記録の仕方としては、
1.単純なのはn回さいころを振るのなら(2n+1)*(2n+1)*(2n+1)の3次元配列を用意して、
-n~nの座標を0~2n+1のインデックスにマッピングして、通るたびにチェックを入れていく。
記録を検索するには、座標に対応する配列要素にチェックが入っているかどうか見るだけ。
でもこの方法はnが大きいとメモリを馬鹿食いする。
2.もしくは、座標を要素とするListコレクションを用意して、
動くたびにこのListにその座標を追加(add)していく。
記録の検索は、containsで座標がListに含まれているかどうかで判断する。
あと、注意点としては、周囲を既に通った座標に囲まれるような動きをしてしまっているのに、
n回には達していないときに、別の座標を探そうと無限に振り直す可能性があるので、
周囲全てが既に通っているかをチェックして、そこで打ち切りにするようにした方がいい。