Здравствуйте. У меня есть задача- написать функции для графа через сопредельные вершины - добавить вершину, добавить ребро, добавить вес ребра.
Удалить вершину, удалить ребро, удалить вес ребра
Найти смежные ли ребра.
Я начала разбираться но я все равно не могу найти толковый материал. Что нашла (смогла) написила. теперь хочу попросить Вас в помощи. Можете дать ссылку на исходник чтобы можно было посмотреть как на самом деле реализованы эти функции. или если код есть в книгах буду благодарна. А то я уже 2 неделю не могу ничего толкового найти.
Спасибо.
То что у меня есть:
Код:
#pragma once
#include <vector>
using AjacencyList = std::vector<Node>;
using VertexList = std::vector<AdjacencyList>;
struct Edge 
{
public:
   Edge(int v, int w);
private:
   int mV; 
   int mW;
};
struct Node
{ 
   int mEnd; 
   float mWeight; 
};
class Graph
{
public:
   Graph(int key, bool digraph);
   void insert(int key);
   void insertEdge(Edge edge);
   void remove(int key);
   void removeEdge(Edge edge);
   bool relatedEdge(Edge edge1, Edge edge2);
   int V();
   int E();
   bool directed();
   
private:
   int Vcnt;
   int Ecnt;
   bool mDigraph = false;
   std::vector<std::vector<int>>  adjacencyLists;
   
};
Код:
#include "Graph.h"
Edge::Edge(int v, int w)
   : mV(v)
   , mW(w)
{
}
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;
}