private void findRute(int x1, int y1, int x2, int y2, int counter)
{
try
{
if((x1 == x2) && (y1 == y2))
{
if(this.min > counter)
{
this.min = counter;
}
}
else
{
if(map[x1-1][y1] == 0)
{
this.findRute(x1 - 1, y1, x2, y2, counter + 1);
}
if(map[x1+1][y1] == 0)
{
this.findRute(x1 + 1, y1, x2, y2, counter + 1);
}
if(map[x1][y1 + 1] == 0)
{
this.findRute(x1, y1 + 1, x2, y2, counter + 1);
}
if(map[x1][y1 - 1] == 0)
{
this.findRute(x1, y1 - 1, x2, y2, counter + 1);
}
}
}
catch(IndexOutOfBoundsException z)
{
}
}
質問する
121 次
2 に答える
4
地図がすべてゼロで構成されていて、あなたが左上隅にいるとしましょう。1 歩右に移動し、次に 1 歩左に移動し、次に 1 歩右に移動します。
無限再帰を防ぐために、すでにアクセスしたセルを何らかの方法でマークする必要があります。
また、のキャッチIndexOutOfBoundsException
はあまり良い考えではありません:
- まず、私はそれを良いスタイルとは考えていません: 後で
try
ブロック内に をスローする可能性のあるコードを追加するIndexOutOfBoundsException
と、コードは静かに失敗し始めます。 - 次に、最初のチェック (
map[x1-1][y1]
) が範囲外の場合、残りのチェックをスキップします。
于 2012-05-11T06:15:04.750 に答える