Data structures 寻找为无向加权图添加虚拟节点的示例代码

Data structures 寻找为无向加权图添加虚拟节点的示例代码,data-structures,Data Structures,我知道您应该添加虚拟节点,以便在任何图中使用BFS查找任意2个节点之间的最短路径。但问题是我无法理解如何编写代码。有人能给我举个例子吗?假设您使用的是邻接列表表示法 假设图形中当前有n节点。 考虑边 A -B < /代码>,并让它具有权重 x。因此,为了表示这一点,您需要在图形中使用x-1虚拟节点。我会这样做的。我假设节点的编号从0到n int dummy_node_count = 0; for(int i = 0; i < number_of_edges; i++){ int a

我知道您应该添加虚拟节点,以便在任何图中使用BFS查找任意2个节点之间的最短路径。但问题是我无法理解如何编写代码。有人能给我举个例子吗?

假设您使用的是邻接列表表示法

假设图形中当前有
n
节点。 考虑边<代码> A -B < /代码>,并让它具有权重<代码> x<代码>。因此,为了表示这一点,您需要在图形中使用
x-1
虚拟节点。我会这样做的。我假设节点的编号从
0到n

int dummy_node_count = 0;
for(int i = 0; i < number_of_edges; i++){
    int a,b, cost;
    scanf("%d %d %d",&a,&b,&cost);
    int prev_node = a;

    for(int j = 0; j < cost-1; j++){
        adj_list[prev_node].push_back(n+dummy_node_count);
        adj_list[n+dummy_node_count].push_back(prev_node);
        prev_node = n+dummy_node_count;
        dummy_node_count++;
    }
}
bfs(source, destination);
int虚拟节点计数=0;
对于(int i=0;i<边的个数;i++){
INTA,b,成本;
scanf(“%d%d%d”、&a、&b和成本);
int prev_node=a;
对于(int j=0;j

但是你应该使用Dijkstra算法在无向加权节点中寻找最短路径。如果成本高达108美元,这种解决方案是不可行的

为什么不使用Dijkstra算法呢?嗯,我想用BFS来解决这个问题。