C++跨类调用Graph类方法后新增边消失问题排查
问题根因
你代码的问题出在search_shortest_path方法的对象初始化逻辑上:
create_graph()函数执行后会返回已经添加完全部边的Graph<T>实例,但你没有用变量接收这个返回值,实例创建后直接被丢弃了- 后续你单独声明的
Graph<T> G是一个全新的空白实例,和create_graph()创建的实例没有任何关联,自然不存在之前添加的边数据
修复方案
直接修改search_shortest_path方法,用变量接收create_graph()的返回值即可,无需额外新建空白Graph实例:
void search_shortest_path(){ // 接收create_graph返回的已完成边初始化的图实例 Graph<T> G = create_graph(); std::cout<<"AVAILABLE ROUTES\n"; G.print_all_key(); T source; T destination; std::cout<<"Enter your starting point: "; std::cin>>source; std::cout<<"Enter your destination point: "; std::cin>>destination; G.dijkstra_algorithm(source, destination); }
额外注意事项
你当前create_graph里的边添加逻辑存在重复添加的问题:
- 你调用
G.add_edge("Manila","Pasig",4)时,因为默认是无向图,会自动反向添加Pasig->Manila权重为4的边 - 你后续又调用
G.add_edge("Pasig","Manila",2),会再添加Pasig->Manila权重2的边,同时自动反向添加Manila->Pasig权重2的边
这会导致两个节点之间存在多条不同权重的边,如果你是要修正边权重,建议先删除旧边再添加新边;如果是写错了,直接删除G.add_edge("Pasig","Manila",2)这一行即可。
内容的提问来源于stack exchange,提问作者juanp_30
相关产品推荐
相关产品推荐

