32 void addVertex(
const Vertex &vertex);
33 void removeVertex(
const Vertex &vertex);
34 bool hasVertex(
const Vertex &vertex)
const;
36 void addEdge(
const Vertex &start,
const Vertex &end,
const Edge &edge);
37 void removeEdge(
const Vertex &start,
const Vertex &end);
38 bool hasEdge(
const Vertex &start,
const Vertex &end)
const;
40 const std::vector<Vertex> &getVertices()
const;
41 Edge &getEdge(
const Vertex &start,
const Vertex &end);
43 std::vector<std::pair<Vertex, Edge>> getOutgoingEdges(
const Vertex &start)
const;
44 std::vector<std::pair<Vertex, Edge>> getIncomingEdges(
const Vertex &end)
const;
47 std::vector<Vertex> vertices_;
48 std::vector<std::vector<std::optional<Edge>>> adjacency_matrix_;