Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用递归法求数组中的最短路径_Java_Arrays_Recursion - Fatal编程技术网

Java 用递归法求数组中的最短路径

Java 用递归法求数组中的最短路径,java,arrays,recursion,Java,Arrays,Recursion,我正在做这个节目。它在数组中查找到目标的短路径。例如,如果输入为: ########### # # #### ###### # # X # # # # ###### ## # # ########### out put看起来像这样 ########### #>>>V # ####V###### # V# >>X #V<<<# ^ # #V######^## #>>

我正在做这个节目。它在数组中查找到目标的短路径。例如,如果输入为:

###########
#         #
#### ######
#    #    X
#    #    #
# ###### ##
#         #
###########
out put看起来像这样

###########
#>>>V     #
####V######
#   V#  >>X
#V<<<#  ^ #
#V######^##
#>>>>>>>^ #
###########

它绕着同一个地方转。是否有一种方法,而不是通过许多其他的if语句。我想用它来制作更大的矩阵,比如100x100。有没有其他方法可以递归地找到最短路径

此伪代码说明如何遍历,而不是查找最小距离。您首先需要正确地遍历。
现在修改它以找到最小距离

 solve ( i , j , ch)
    {
      if(! safe(i,j)) return false

      mark visited[i][j] = ch
      if(matrix[i][j] == 'X') return true
      return ( solve(i-1 , j ,T) | solve(i , j-1 , L) |solve(i , j+1 , R) |solve(i+1 , j , B))
    }

    main()
    {
    // x,y is starting point
      if(!solve(x,y))  print no path
      else found a path
    }
您需要探索所有4个方向,但只探索第一个可能的方向,这就是您使用如此多的
if-else
的原因,这仍然会导致在测试用例中看到的相同路径上循环

###########
#         #
#### ######
#>V>V#    X
# >^.#    #
# ###### ##
#         #
###########
 solve ( i , j , ch)
    {
      if(! safe(i,j)) return false

      mark visited[i][j] = ch
      if(matrix[i][j] == 'X') return true
      return ( solve(i-1 , j ,T) | solve(i , j-1 , L) |solve(i , j+1 , R) |solve(i+1 , j , B))
    }

    main()
    {
    // x,y is starting point
      if(!solve(x,y))  print no path
      else found a path
    }