data-structures - 寻求为无向加权图添加虚拟节点的示例代码
问题描述
我知道您应该添加虚拟节点以在任何图中使用 BFS 找到任何 2 个节点之间的最短路径。但问题是我无法理解如何编码。有人可以给我一个例子吗?
解决方案
假设您正在使用邻接列表表示。
假设您当前n
在图中有节点。考虑一条边a - b
,让它有重量x
。因此,为了表示这一点,您需要x-1
图表中的虚拟节点。这就是我将如何做到这一点。我假设节点的编号从0 to 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);
但是你真的应该使用 Dijkstra 算法在无向加权节点中寻找最短路径。如果成本可以高达 10 8这个解决方案是不可行的。
推荐阅读
- dynamic-programming - 使所有数组元素为零的最低成本
- .net - 无法在 .Net webform 项目中安装包“HighChart”
- spring-boot - Tomcat 10 的现有 Spring Boot 应用程序
- flutter - 从 API 返回的 Text 小部件内的 Null 值
- flutter - Flutter Chopper Post 图片
- javascript - 将 Href 链接到正确的 pdf 文件
- opencv - 如何使用 Tensorflow 2 使用 graph_transform?
- react-native - 订阅还是推送通知?
- visual-studio-code - 本地主机在移动设备上不起作用 [Vscode liveserver]
- c++ - 如何从网络层访问“UdpBasicApp”生成的应用包?