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

假设地图完全由零组成,而您位于左上角。你要向右移动一步,然后向左移动一步,然后再向右移动一步,以此类推。

您需要以某种方式标记您已经访问过的单元格,以防止无限递归。

此外,捕获的IndexOutOfBoundsException不是一个好主意:

  • 首先,我不认为它是好的风格:如果稍后你要在try块内添加一些也可以 throwIndexOutOfBoundsException的代码,你的代码将开始默默地失败;
  • 其次,如果第一个检查 ( map[x1-1][y1]) 超出范围,您将跳过剩余的检查;
于 2012-05-11T06:15:04.750 回答
-1

可能您尝试访问 -1 索引或长度+1

想想边缘发生了什么

于 2012-05-11T06:16:19.327 回答