在一个包含多个普通节点和几个特殊标记节点的图中,是否有通用算法可以找到距离给定起始位置最近的标记节点?
或者最好的方法是使用广度优先搜索查找标记节点,然后对每个发现的标记节点执行Dijkstra算法,以确定哪个是最近的节点?
或者最好的方法是使用广度优先搜索查找标记节点,然后对每个发现的标记节点执行Dijkstra算法,以确定哪个是最近的节点?
如SaiBot所述,如果起始节点始终相同,并且您将执行多个查询以更改“标记”节点,则有更快的方法来完成任务。特别地,您可以在每个节点中存储在第一次完整遍历中找到的“父”和节点到起始节点的距离。当添加新批次的k个标记节点时,您可以通过查看每个标记节点的此距离立即知道最靠近起点的节点。
最快的方法是从起始位置(起始节点)直接执行Dijkstra算法。当“接近程度”被定义为必须遍历的边数时,您可以将每条边的权重赋值为1。如果允许预计算,则有更快的方法来完成它。