我已经苦思冥想了几个小时,因为我不知道如何在Haskell中编写深度优先搜索算法。
我的图是用邻接表实现的,其中键(或图的节点名称)是列表索引:
0 -> 1
1 -> 0, 2
2 -> 1
As a Haskell list: [[1],[0,2],[1]]
以下是DFS的代码示例:
以下是我目前为止编写的DFS代码:
dfs graph visited node = helper graph visited (graph !! node) node
where helper _ _ visited [] _ = visited
helper graph visited (x:xs) currNode
| elem x visited = helper graph visited xs currNode
| otherwise = dfs graph (currNode:visited) x
我理解问题在于当搜索到了图的一端后,它没有进行回溯并尝试其他相邻节点。为了解决这个问题,我一直在尝试修改守卫条件中的"otherwise"部分,但是似乎没有找到可行的方法。请问有什么方法可以解决这个问题?
!!
的复杂度为O(n),因此你的DFS复杂度将会更大。 - Satvik