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

使用vector实现有向图搜索时push_back调用报错,求修复方案

问题修复方案

编译错误原因

你定义的graph是vector<int>类型,这意味着graph[i]返回的是一个int值,而push_back()是std::vector类的成员函数,int类型没有这个方法,所以编译器报错。

有向图的邻接表需要用二维vector(即vector<vector<int>>)来实现:每个索引对应一个节点,索引对应的vector存储该节点指向的所有邻接节点。

修复后的代码

#include <iostream>
#include <vector>
using namespace std;

// 改为二维vector,每个节点对应一个存储邻接点的vector
vector<vector<int>> graph(1001);
int n, a;

// 修正find函数:去掉全局sum,改为传参或用局部变量,同时确保递归返回值
int find(int x, int sum = 1) {
    // 这里的逻辑需要根据你的实际需求调整,原逻辑可能不符合有向图搜索的预期
    // 示例逻辑:假设是找环的长度,你需要根据实际场景修改
    if (graph[x].empty()) {
        return sum;
    }
    // 假设每个节点只有一个出边(如拓扑结构),如果是多邻接点需要遍历
    int next = graph[x][0];
    if (next == x) {
        return sum;
    }
    return find(next, sum + 1);
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a;
        // 现在graph[i]是vector<int>,可以正常调用push_back添加邻接点
        graph[i].push_back(a);
    }
    for (int i = 1; i <= n; i++) {
        int result = find(i);
        cout << "节点" << i << "的搜索结果:" << result << endl;
    }
    return 0;
}

额外需要调整的点

  • 全局变量问题:原代码中的sum是全局变量,多次调用find会导致累加错误,改为函数参数传递更合理。
  • find函数逻辑:原函数的判断条件graph[x]==graph[graph[x]]逻辑模糊,需要根据你实际的搜索需求(比如找环、路径长度等)调整。示例中假设每个节点只有一个出边,如果你需要处理多邻接点的情况,需要在find函数中遍历graph[x]的所有元素。
  • 递归返回值:原递归调用find(graph[graph[x]])没有返回值,会导致函数行为未定义,必须加上return。

内容的提问来源于stack exchange,提问作者rlatlsgn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:37:07