COP3530/Project12/digraph.h

95 lines
No EOL
1.6 KiB
C++

#ifndef GRAPH_H
#define GRAPH_H
#include <vector>
using namespace std;
class graphNode {
private:
int pointNum;
vector<graphNode*> connectedNodes;
public:
graphNode(int id, vector<graphNode*> connections) {
pointNum = id;
connectedNodes = connections;
}
graphNode(int id) {
pointNum = id;
}
int getPointNum() {
return pointNum;
}
void setConnectedNodes(vector<graphNode*> n) {
connectedNodes = n;
}
vector<graphNode*> 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<graphNode> nodesList;
public:
graph(vector<vector<int>>& v) {
for (auto i = v.begin(); i != v.end(); i++) {
vector<int> p = *i;
graphNode tmp(p[0]);
nodesList.push_back(tmp);
}
for (auto i = v.begin(); i != v.end(); i++) {
addConnections(*i);
}
}
void addConnections(vector<int>& n) {
int num;
vector<graphNode*> 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<int>& 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