在递归方法中查找最小的int(路径大小)

时间:2015-04-05 19:40:09

标签: java recursion arraylist

我试图在使用递归的迷宫中找到最小的路径大小。 要做到这一点,迷宫必须经过所有可能的路径,然后不断更新"最短的长度"。

我能够通过所有可能的列表并打印这些坐标和路径大小,但我找不到最小值,因为最后找到的路径总是更新为& #34;最短的长度"。

所以,我正在考虑将所有解决方案路径长度添加到ArrayList<Integer> list,然后在递归求解方法之外创建一个单独的静态类,在那里我找到最小值并返回它#s; s值为solve()方法并从那里继续。这是最好的方法吗?或者我可以在solve()方法中找到最短的长度和相应的坐标吗?

这是递归案例的代码:

else {
  for(int i = 0; i < directions.length; i++)
  {   
    Coord nextSpot = currentSpot.addTo(directions[i]); 
    if(nextSpot.validSpot(maze)) 
      if(!newPath.contains(nextSpot)){

      ArrayList<Coord> solution = //The recursive call
                         solve(newPath,nextSpot,goal,maze); 

        if(solution != null){ 

          int shortestLength = 100; //arbitrary large length
         // lengths.add(lengthSolution); ?? Possible alternative?
          System.out.println(lengthSolution);
          System.out.println(solution);
          if( solution.size() < shortestLength ){
            shortestLength = solution.size();
            System.out.println(shortestLength);
          } 
        }
    }//ifs
  }//for
   return null;
}//else (recursive case)

1 个答案:

答案 0 :(得分:0)

int globalsteps =0;

int maze(x,y,steps) {
    if(icangoup){  maze(x+1,y,steps +1);}
    if(icangodown){ maze(x-1,y,steps +1);}
    if(icangoleft){  maze(x,y+1,steps +1);}
    if(icangoright){  maze(x,y-1,steps +1);}
    if(ifoundtheexit!!!!) {
        if(globalsteps == 0 || steps < globalsteps)
            globalsteps = steps;
        }
    }
}