You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:39:04