我正在研究数据结构,只是为了学习。现在,我拥有一个非常基础的图形数据结构。
我可以创建具有预定义大小的图形,然后向/从每个顶点添加边缘(无向)。这是到目前为止的代码:
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;
}
这工作得很好,但是我还想在创建图形对象之后添加节点。我真的不知道该怎么做。
任何对此的指导(以及对代码的总体改进)将不胜感激。
答案 0 :(得分:1)
使用向量存储邻接列表并在需要时调整其大小:
std::vector<std::vector<int>> adjList;
不要用new
分配它,不要删除它,使用标准容器!