Работа с вектором вектора с неизвестной длиной - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь создать список смежности, используя вектор вектора.Количество узлов неизвестно в начале кода, а вместо этого берется как ввод с консоли.Узлы пронумерованы от 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.

В чем причина?

Additioanlly

КогдаЯ изменяю свой код

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);
    }
...