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
}