我有一个具有N个节点(从1到N编号)和M个双向边(由(A,B)组成)的连接图。边没有权重。
我有K个人从节点1开始,我想探索图中的每个节点。一个人从一个节点移动到其相邻节点需要一单位时间。
要探索每个节点需要多长时间?我正在寻找一种有效的算法来计算最小遍历时间,但我担心这是一个NP完全问题。(尽管边数和人数的限制很小)。
对我来说,这似乎是BFS。
您可以将图形视为树,其中起始节点是根。从这个角度来看,如果叶子节点的数量<=人数,则答案将是最深的叶子节点(距离根最远),答案将是该叶子节点的深度。 这是正确的,因为如果每个人都访问每个叶子节点,则在此过程中访问所有节点。
但是,如果每个人访问叶子节点后仍有未访问的节点,则必须将最接近未访问节点的人访问该节点所需的最长时间(或距离)添加到答案中。
然而,这还不是完整的答案。它比那更复杂。
如果您有以下图像:
你不想盲目地进行广度优先搜索。你应该按照从最浅到最深的顺序访问节点,这样你就不必再次下降和上升路径。例如,0 -> 1 -> 0 -> 2 -> 0 -> 3 -> 0 -> 4比0 -> 4 -> 0 -> 3 -> 0 -> 2 -> 0 -> 1更有效率。之所以正确是因为你只能在最后一次遍历中节省时间,所以你希望使它成为最长的。