#include /* type vector */ #include /* type string */ #include /* cout, cerr */ #include /* type stringstream to easily concat a result string */ #include /* INT_MAX */ #include #include "edge.h" #pragma once void vectorToString(std::vector vector); /* -- Class Graph -- */ class Graph { private: std::vector vertices; // vector connecting vertices with indicies; needed for name resolution void _letTheSalesmanTravel(const std::string& vertex, std::vector& visited, const std::string& startingPoint); public: Graph(); // default constructor Graph(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 int* performDijkstra(const std::string& sourceVertex); // Dijkstra algorithm implementation void letTheSalesmanTravel(const std::string& vertex); std::string getNearestNeighbour(const std::string& vertex, std::vector& visited); };