我正在看一个图形问题,我给了一个源节点,需要找到距离固定距离的所有其他节点,其中节点之间的每个边缘都有统一的成本。所以我使用标准FIFO队列技术实现了广度优先搜索,但是在固定距离停止BFS会给我带来问题。
如果我使用DFS,我可以通过每次递归调用传递当前深度,但我不能在这里做到这一点。我无法修改图形的节点以保持额外的参数(距离)。有什么建议或参考吗?
答案 0 :(得分:2)
只需使用两个队列并在它们之间来回反弹。每次从一个切换到另一个时,将深度计数增加一。
详细说明......
维护“活动”队列和“非活动”队列。
从活动队列中弹出一个节点。将其邻居添加到非活动队列。重复,直到活动队列为空。然后交换队列。
这保持不变量,即如果活动队列中所有节点的距离为d
,则非活动队列中所有节点的距离为d+1
。很容易随时跟踪和停止。
答案 1 :(得分:1)
您可以将深度传递给放入队列的值。您还可以保留一个单独的数组来存储到达每个节点的深度。
答案 2 :(得分:0)
封装您传递的顶点以及它们与BFS源的距离。
另一种可能性是仅标记队列中的顶点;通常,图表框架允许您为图表元素分配权重,这是一种可以用于您的目的的机制。
最后一种可能性是在完全处理BFS的一个级别的边界之后将实际上不在图中的标记顶点插入到队列中,这样您就知道何时开始新的BFS深度级别。这会使您的队列看起来像v u w x y MARKER s t j l k
,其中所有这些都是图的顶点,MARKER
除外。