Реализация графа через смежные вершины

222
22 марта 2018, 09:22

Здравствуйте. У меня есть задача- написать функции для графа через сопредельные вершины - добавить вершину, добавить ребро, добавить вес ребра. Удалить вершину, удалить ребро, удалить вес ребра Найти смежные ли ребра.

Я начала разбираться но я все равно не могу найти толковый материал. Что нашла (смогла) написила. теперь хочу попросить Вас в помощи. Можете дать ссылку на исходник чтобы можно было посмотреть как на самом деле реализованы эти функции. или если код есть в книгах буду благодарна. А то я уже 2 неделю не могу ничего толкового найти. Спасибо.

То что у меня есть:

//h

#pragma once
#include <vector>
struct Edge 
{
public:
   Edge(int v, int w);
private:
   int mV; 
   int mW;

};

 struct Node 
 {
   public:
     Node(int x, Node* node);
  private:
     int mX;
     Node* mNode;
};
class Graph
{
 public:
   Graph(int key, bool digraph);
   void insert(int key);
   void insertEdge(Edge edge);
   void remove(int key);
   void removeEdge(Edge edge);
   int V();
   int E();
   bool directed();
private:
   int Vcnt;
   int Ecnt;
   bool mDigraph = false;
   std::vector<std::vector<int>> mVector;
   std::vector<Node*>  adjacencyLists;

};

// cpp

#include "Graph.h"


Edge::Edge(int v, int w)
  : mV(v)
  , mW(w)
{
}

 Node::Node(int x, Node* node)
  : mX(x)
  , mNode(node)
 {
 }
 Graph::Graph(int key, bool digraph)
   : Vcnt(key)
   , Ecnt(0)
   , mDigraph(digraph)
   , adjacencyLists(key)
 {
   adjacencyLists.assign(key, 0);
 }
void Graph::insert(int key)
{
}
void Graph::insertEdge(Edge edge)
{
   int v = edge.mV;
   int w = edge.mW;
   adjacencyLists[v] = new Node(w, adjacencyLists[v]);
   if (!mDigraph)
      adjacencyLists[w] = new Node(v, adjacencyLists[w]);
   Ecnt++;
}
void Graph::remove(int key)
{
}
void Graph::removeEdge(Edge edge)
{
}
int Graph::V()
{
  return Vcnt;
}
int Graph::E()
{
  return Ecnt;
}
bool Graph::directed()
{
   return mDigraph;
}
READ ALSO
Крашится программа(с++)

Крашится программа(с++)

Ошибка на этапе выполненияОтладчиком определил что слетает во втором вызове функции minusEL на месте delete[]ar

193
Выравнивание по центру вывод в с++

Выравнивание по центру вывод в с++

Нужна помощь в форматном выводеНужно устанавливать фиксированую ширину поля

260
Помогите новичку C++ [требует правки]

Помогите новичку C++ [требует правки]

Помогите найти ошибку,при выполнении вылезает какая-то непонятная шляпа,весь день не могу понять в чем делоПрограмма должна удалять из строки...

206
Error: no matching function for call to ‘Triangle::Triangle(double, double, double)

Error: no matching function for call to ‘Triangle::Triangle(double, double, double)

Подскажите пожалуйста, что не так, а то вроде бы типичный код, а ошибка одна и та же постоянно, если что OS Linux Ubuntu, IDE AnjutaЗаранее спасибо за ответы

189