处理未知长度的向量

时间:2019-02-23 07:21:16

标签: c++ vector adjacency-list

我正在尝试使用vector向量创建邻接表。节点数量在代码开始时未知,而是从控制台输入的。节点从1开始编号。下面是代码

class Graph {
public:
    int numNodes;
    vector<vector<int>> g;

    Graph(int n):numNodes(n) {
        for(int i=0;i < n;i++)
        {
            vector<int> v;
            g.push_back(v);
        }
    }

    void add_edge(int u, int v) {
        cout << "adding edge from " << u << " " << v << endl;

        g[u-1].push_back(v-1);
        g[v-1].push_back(u-1);
        cout << "added " << endl;
    }
}

显然,在调用add_edge时,它永远不会打印added

是什么原因?

另外

当我更改代码时

g[u-1].push_back(v-1);

收件人

vector<int> a = g[v-1];
g[u-1].push_back(v-1);

它工作正常。

我的主要代码如下,

    int n, m;
    cin >> n; //number of nodes
    Graph graph(n);
    cin >> m; //number of edges
    // read and set edges
    for (int i = 0; i < m; i++) {
        int u, v; //to and from vertex;
        cin >> u >> v;
        u--, v--;
        // add each edge to the graph
        graph.add_edge(u, v);
    }

0 个答案:

没有答案