#include /* cout, cerr */ #include /* INT_MAX */ #include /* type stringstream to easily concat a result string */ #include /* type string */ #include /* type vector */ #include "edge.h" #pragma once void vectorToString(std::vector vector); /* -- Class Graph -- */ class ExtendedGraph { private: std::vector vertices; // vector connecting vertices with // indicies; needed for name resolution std::vector visited = {false}; public: ExtendedGraph(); // default constructor ExtendedGraph(const std::vector &vertices, const std::vector &edges); // param. constructor std::vector> adjacencyMatrix; // vector of vectors containing integers (the adjacency // matrix) /* -- Resolves a given string of a vertex and returns its position in the adjacencyMatrix (as integer). Returns -1 if name could not be resolved, which indicates the the name was not found. -- */ int resolveVertex(const std::string &name); void printGraph(); // prints out the graph with vertices and the adjacencyMatrix /* -- Graph Manipulation Functions -- */ void insertVertex( const std::string &vertex); // inserts a new vertex; throws error, if // vertex already exists in Graph void deleteVertex( const std::string &vertex); // deletes a vertex from the Graph; throws an // error, if vertex does not exist void insertEdge( const Edge &edge); // inserts a new edge; parameter can be {std::string, // std::string} due to implicit cast... // ...does not check if the edge already exists, nor // notifies user/programmer void deleteEdge( const Edge &edge); // deletes an edge; parameter can be {std::string, // std::string} due to implicit cast... // ...does not check if edge exists bool adjacent(const std::string &vertex1, const std::string &vertex2); // checks if vertex1 and vertex2 are adjacent; // returns boolean; adjacency indicates that... // ...a direct connection between a <--> b // (direction NOT important) exists std::vector neighbours(const std::string &vertex); // returns a vector of strings, containing all // neighbouring vertices of the parameter vertex... // ...Neighbours are all vertices that a given // vertex is connected to through OUTGOING edges void depthFirstSearch(std::string vertex); void doTheDFS(std::string vertex, std::vector &visited); int getEdgeWeight(std::string sourceVertex, std::string targetVertex); };