如何动态地将顶点添加到图形?

时间:2018-11-23 22:00:40

标签: c++ graph-theory

我正在研究数据结构,只是为了学习。现在,我拥有一个非常基础的图形数据结构。

我可以创建具有预定义大小的图形,然后向/从每个顶点添加边缘(无向)。这是到目前为止的代码:

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 :(得分:1)

使用向量存储邻接列表并在需要时调整其大小:

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

不要用new分配它,不要删除它,使用标准容器!