#ifndef GRAPH_H #define GRAPH_H #include using namespace std; class graphNode { private: int pointNum; vector connectedNodes; public: graphNode(int id, vector connections) { pointNum = id; connectedNodes = connections; } graphNode(int id) { pointNum = id; } int getPointNum() { return pointNum; } void setConnectedNodes(vector n) { connectedNodes = n; } vector getConnectedNodes() { return connectedNodes; } void displayGraphNode() { cout << pointNum << ": "; for (auto i = connectedNodes.begin(); i != connectedNodes.end(); i++) { cout << (*i)->pointNum << " "; } cout << endl; } }; class graph { private: vector nodesList; public: graph(vector>& v) { for (auto i = v.begin(); i != v.end(); i++) { vector p = *i; graphNode tmp(p[0]); nodesList.push_back(tmp); } for (auto i = v.begin(); i != v.end(); i++) { addConnections(*i); } } void addConnections(vector& n) { int num; vector connects; for (auto i = n.begin(); i != n.end(); i++) { if (i == n.begin()) { num = *i; } else if (*i == num) { continue; } else { connects.push_back(&nodesList[*i]); } } nodesList[num].setConnectedNodes(connects); } void addgraphNode(vector& n) { auto i = nodesList.end(); int x = i->getPointNum(); graphNode tmp(x + 1); addConnections(n); } void displayGraph() { for (auto i = nodesList.begin(); i != nodesList.end(); i++) { (*i).displayGraphNode(); } } }; #endif