1
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)
        {

        }
    }
4

2 に答える 2

4

地図がすべてゼロで構成されていて、あなたが左上隅にいるとしましょう。1 歩右に移動し、次に 1 歩左に移動し、次に 1 歩右に移動します。

無限再帰を防ぐために、すでにアクセスしたセルを何らかの方法でマークする必要があります。

また、のキャッチIndexOutOfBoundsExceptionはあまり良い考えではありません:

  • まず、私はそれを良いスタイルとは考えていません: 後でtryブロック内に をスローする可能性のあるコードを追加するIndexOutOfBoundsExceptionと、コードは静かに失敗し始めます。
  • 次に、最初のチェック ( map[x1-1][y1]) が範囲外の場合、残りのチェックをスキップします。
于 2012-05-11T06:15:04.750 に答える