95 lines
No EOL
1.6 KiB
C++
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 |