使用 BFS 查找与图中所有其他节点的最大距离最小的节点?

Finding which node that has the least maximum distance to all the other nodes in a graph using BFS?

几天前我做了这个函数来使用 BFS 求出图形的直径:

dist[v] = 0;
queue<int> next;
next.push(v);

int bdist = 0; //biggest distance
while(!next.empty()) {
    int pos = next.front();
    next.pop();
    bdist = dist[pos];

    for(int i = 0; i < graph[pos].size(); ++i) {
        int nghbr = graph[pos][i];
        if(dist[nghbr] > dist[pos]+1) {
            dist[nghbr] = dist[pos]+1;
            next.push(nghbr);
        }
    }
}

return bdist-1;
}

How/what 我是否更改代码以便返回与所有其他节点的最大距离最小的节点,而不是返回直径?新代码会是什么样子?

基本上你是在为每个节点调用函数biggest_dist(另外我猜你应该return bdist 而不是bdist-1)。因此,对于每个节点,您都可以获得最大节点与该节点的距离。所以这是获取具有最小最大距离的节点的伪代码

     /*g is your graph */
     /* This code goes in your main */
     /* assuming 0 based indexing of nodes */
     answer = 0 /* stores your answer, let node 0 be the answer we will update it */
     dis    = biggest_dist(0,g) /* stores the maximum distances of node 0 */
     for each node 
           maxdist = biggest_dist(node,g)
           if maxdist < dis:
              dis = maxdist
              answer = node

     print answer /* your answer */

请记住可以有多个答案,这将打印其中的任何一个。同样按照其他人的建议,您应该编辑您的问题以反映您的努力。
编辑
该算法的复杂度为O(EV+V^2)。如果您使用 floyyd warshall 来计算您可以轻松获得答案的所有对象之间的最短距离,它将是 O(V^3) 并使用 dijakstra 的值为 O(EV+V^2logV)。现在在一个简单的图表中 E 最多可以是 V^2 如果我必须降低时间复杂度,我会选择你给出的算法。