Я пытаюсь реализовать граф, используя массив векторов. У меня невероятно трудное время. Векторы будут удерживать вершины, смежные с вершиной v, которая является индексом массива с именем uvertices.Попытка реализовать граф с использованием массива векторов
Это то, что у меня есть до сих пор.
class Graph {
public:
int V; //this will represent the number of vertices in the graph
std::vector<int>* vertices;
Graph(int V) {
vertices = new std::vector<int>[V];
}
Здесь я создал (или думать и имел в виду, что они создали) массив размера V (V есть число вершин в графе), который содержит векторы. Я тогда хочу иметь возможность создавать края, поэтому у меня есть
void Graph::insert_edge(int v, int u) {
}
как способ. Я хочу, чтобы push_back значение u в вектор, содержащий список смежности вершины v. Каждый индекс моего массива векторов (с именем vertices) представляет собой идентификатор каждой вершины v на графике. Так что я хочу сделать что-то вроде
vertices[v].push_back(u);
я с удивлением обнаружил, что, когда я напечатал вершины [v]., Intellisense дал мне список возможных функций, в том числе push_back. Причина, по которой я был удивлен, заключалась в том, что я фактически не создавал ни одного из векторов, но я оставил ее так. Это, очевидно, не работает, поэтому я начал отладку, и я понял, что всякий раз, когда я сначала вызываю insert_edge, он говорит мне, что размер и емкость моего массива «вершины» равны 0. Несмотря на то, что я создал свою структуру данных графа как
Graph G(8);
Я потратил около двух часов, пытаясь понять, как с этим работать, и я просто не увенчался успехом.
Как сделать так, чтобы при вставке края я мог посмотреть на правильный индекс v в массиве вершин и получить доступ к функции push_back вектора, который имеет этот индекс массива, чтобы я мог добавить вершина u в список смежности вершины v.
Кроме того, я действительно искренне прошу, чтобы, если люди дадут мне опросы или проголосуют, чтобы закрыть мою тему, ПОЖАЛУЙСТА, дайте мне знать, почему. Это может быть так расстраивать, чтобы тратить время на то, чтобы написать все это и убедиться, что это ясно написано только для того, чтобы его проголосовали, даже если кто-нибудь даже не сказал мне, почему они меня голосуют.
Вы уверены, что имеете в виду 'новый std :: vector [V]', а не 'new std :: vector (V)'? –
CompuChip
@CompuChip Да. Я динамически создаю массив, содержащий объекты типа std :: vector –
FrostyStraw
@FrostyStraw, почему вы хотите управлять памятью вручную? – user2079303