【发布时间】:2020-08-27 06:51:32
【问题描述】:
我正在尝试使用深度优先搜索来实现递归回溯功能,但我陷入了需要知道我在矩阵中的先前位置的点。
这个想法是这样的:我有一个二维数组的矩阵,这是我的函数:
标记当前点,如果该点是我正在寻找的,我将矩阵中的点设置为解决方案的一部分,并将所有先前标记的点设置为解决方案的一部分。 否则我将函数调用到一个有效的相邻点。
问题是第三种情况:如果没有有效的相邻点,那么我需要将该点标记为错误并将函数调用到我之前的位置。为此,我认为我需要一个堆栈来跟踪我以前的动作,但我很难弄清楚如何在 f# 中这样做。
let rec solve (x,y) =
mark (x,y)
if (x,y) = pointimlookingfor then
for x in 0.. array width-1 do
for y in 0..array height-1 do
if Myarray.[x,y]=markedpoint then
Myarray.[x,y]<-partofsolution
else if (List.isEmpty(adjacentslist) then
Myarray.[x,y]<-wrong point
solve (the previous visited point)
else
for (adjacentpoint) in adjacentslist do
solve(adjacentpoint)
有什么想法吗?
【问题讨论】:
标签: recursion f# stack depth-first-search backtracking