Как мне динамически добавлять вершины в граф? - PullRequest
0 голосов
/ 24 ноября 2018

Я делаю некоторую работу над структурами данных, просто чтобы узнать.Прямо сейчас у меня есть, по общему признанию, очень базовая структура данных графа.

Я могу создать граф с предварительно определенным размером, а затем добавить ребра в / из каждой вершины (не направленной).Вот код на данный момент:

graph.h

#pragma once
#include "stdafx.h"
#include <vector>
#include <iostream>
#include <algorithm>

class Graph {
    int vertices; // num of vertices in graph
    std::vector<int> *adjList;
public:
    Graph(int vertices);
    void addEdge(int v, int w);
    void printGraph();
};

Graph::Graph(int vertices) {
    this->vertices = vertices;
    adjList = new std::vector<int>[vertices];
}

void Graph::addEdge(int v, int w) {
    adjList[v].push_back(w);
}

void  Graph::printGraph() {
    for (int i = 0; i < adjList->size(); ++i) {

    }

}

graph.cpp

#include "stdafx.h"
#include "graph.h"

int main()
{
    Graph graph(4);
    graph.addEdge(0, 1); //counter starts at 0
    graph.addEdge(0, 2);
    graph.addEdge(2, 1);
    graph.addEdge(2, 3);

    return 0;
}

Этоработает довольно хорошо, однако я также хотел бы добавить узлы после того, как объект графа уже был создан.Я действительно не могу понять, как это сделать.

Любое руководство по этому вопросу (а также общие улучшения кода) будут с благодарностью.

1 Ответ

0 голосов
/ 24 ноября 2018

Используйте вектор для хранения списка смежности и при необходимости измените его размер:

std::vector<std::vector<int>> adjList;

Не выделяйте его с помощью new, не удаляйте его, используйте стандартные контейнеры!

...