Здравствуйте. У меня есть задача- написать функции для графа через сопредельные вершины - добавить вершину, добавить ребро, добавить вес ребра.
Удалить вершину, удалить ребро, удалить вес ребра
Найти смежные ли ребра.
Я начала разбираться но я все равно не могу найти толковый материал. Что нашла (смогла) написила. теперь хочу попросить Вас в помощи. Можете дать ссылку на исходник чтобы можно было посмотреть как на самом деле реализованы эти функции. или если код есть в книгах буду благодарна. А то я уже 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;
}