Можно ли добавить узлы в граф, как только он будет сделан? - PullRequest
1 голос
/ 28 марта 2019

Интересно, можно ли было добавить и удалить узлы из моего графика, даже если он уже был создан?

Код ниже показывает, как я создаю свой график:

int V = 6;  // Number of vertices in graph
int E = 18;  // Number of edges in graph 
//graph being created
struct Graph* graph = createGraph(V, E); 
//////////////////////////////////////////////

struct Graph* createGraph(int V, int E) { 
   struct Graph* graph = new Graph; 
   graph->V = V; 
   graph->E = E; 
   graph->edge = new Edge[E]; 
   return graph; 
}

1 Ответ

1 голос
/ 28 марта 2019

Это всегда возможно. Еще более болезненно, если вы используете выделенные вручную массивы:

  • чтобы удалить узел, вам нужно уменьшить значение graph->E и скопировать все узлы, следующие за тем, который вы хотите удалить, на одну позицию ранее, например, с помощью
    std::copy(graph->edge+i, graph->edge+graph->E, graph+i-1);
  • чтобы вставить узел, вам нужно выделить новый массив, скопировать все узлы, добавить новый (в конце?) И увеличить graph->E и delete[] старый массив.

Однако вы бы сделали себе одолжение, если бы вместо этого использовали vector<Edge>. Затем вы можете динамически добавлять новые узлы с помощью graph->edge.pushback() и удалять узлы с помощью graph->edge.erase(). Вам больше не нужен будет график-> E, поскольку вы можете получить его в потоке с помощью graph->edge.size().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...