我得到了以下问题作为任务,但它真的让我感到困惑:
考虑BFS算法。给定有向图G=(V,E)和起始点s∈V,该算法计算对于每个顶点u∈V的值d[u],其中d[u]是从s到u的最短路径长度(边数)。这个问题的目标是修改BFS类算法,以计算从s到G中每个顶点的最短路径数量。
这可以分为两步完成:
(a)首先在G上运行标准BFS,从s开始。解释如何使用此BFS结果生成一个新的有向图G2 = (V2,E2),其中V2⊆V且E2⊆E,使得G2中所有从s开始的路径都是G中从s开始的最短路径,反之亦然,即G中从s开始的每条最短路径都是G2中的路径。
(b)解释如何利用第(a)部分的结果来计算每个顶点u∈V的数量n[u],其中n[u]是从s到u的G2路径数量。(提示:可以通过BFS的修改来完成这一点。)你的两个算法应该在O(V + E)时间内运行。
对于第(a)部分,我不太确定如何利用BFS结果生成新的有向图。我不理解应该以怎样的方式形成它。我应该使用访问的节点来形成一个新的图吗?当进行BFS时,所有节点都被访问,我该如何形成不同的图。
考虑BFS算法。给定有向图G=(V,E)和起始点s∈V,该算法计算对于每个顶点u∈V的值d[u],其中d[u]是从s到u的最短路径长度(边数)。这个问题的目标是修改BFS类算法,以计算从s到G中每个顶点的最短路径数量。
这可以分为两步完成:
(a)首先在G上运行标准BFS,从s开始。解释如何使用此BFS结果生成一个新的有向图G2 = (V2,E2),其中V2⊆V且E2⊆E,使得G2中所有从s开始的路径都是G中从s开始的最短路径,反之亦然,即G中从s开始的每条最短路径都是G2中的路径。
(b)解释如何利用第(a)部分的结果来计算每个顶点u∈V的数量n[u],其中n[u]是从s到u的G2路径数量。(提示:可以通过BFS的修改来完成这一点。)你的两个算法应该在O(V + E)时间内运行。
对于第(a)部分,我不太确定如何利用BFS结果生成新的有向图。我不理解应该以怎样的方式形成它。我应该使用访问的节点来形成一个新的图吗?当进行BFS时,所有节点都被访问,我该如何形成不同的图。