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

图深拷贝问题:BFS函数中visited哈希表未更新排查

图深拷贝代码问题修复

核心错误点

你提到的BFS函数中visited哈希表无法更新的问题,原因很直接——用了未初始化的temp_val变量:
原代码里的错误行:

visited.insert(std::make_pair(temp_val,true)); //does not get updated

temp_val是未赋值的局部变量,根本没关联到当前要标记的节点值,导致visited完全无法记录新节点的访问状态。

修正方案

把这行改成使用当前原节点的val(或拷贝后的节点值,两者值一致):

visited.insert(std::make_pair(temp_node->val, true));

额外提示(不影响核心问题定位,但能让代码正常工作)

除了上述核心错误,还有两处细节问题会导致深拷贝失效:

  • BFS和new_neigbors函数中的indexer是按值传参,会生成副本,原函数的映射表无法同步更新,需改成引用传递:std::unordered_map<Node*,Node*>& indexer
  • 初始化新节点时直接传入原节点的neighbors属于浅拷贝,应先初始化空邻居列表,后续再替换为克隆后的节点

修正后的BFS关键片段

void BFS(Node* node, std::unordered_map<Node*,Node*>& indexer){
    std::unordered_map<int,bool> visited;
    std::vector<Node*> output_nodes;
    output_nodes.push_back(node);
    visited.insert(std::make_pair(node->val, true));
    Node* temp_node;
    Node* temp_node_2;
    for(int i = 0 ; i < output_nodes.size() ; i++){
        for(int j = 0 ; j < output_nodes.at(i)->neighbors.size(); j++){
            temp_node = output_nodes.at(i)->neighbors[j];
            if(!visited[temp_node->val]){
                temp_node_2 = new Node(temp_node->val); // 初始化空邻居列表
                indexer.insert({temp_node,temp_node_2});
                output_nodes.push_back(temp_node_2);

                // 修正后的visited更新逻辑
                visited.insert(std::make_pair(temp_node->val, true));
            }
        }
    }
    new_neigbors(indexer, node, output_nodes);
}

内容的提问来源于stack exchange,提问作者BITE004 Mir Aatif

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:13:10