Как новичок в C ++, мне нужно сделать граф списка смежности. Я хочу создать взвешенный график, который показывает отношения топологии между плоскостями и их углом в виде веса. Таким образом, в графе плоскости представляют вершины графа (например, v), а линии пересечения представляют ребра графа (например, v1v2). Каждая линия пересечения имеет также один атрибут. Моя программа генерирует такой текстовый файл:
край, атрибут, вес
v1v2, 1, 90
v1v3, 2, 45
v1v3, 2, 30
v2v3, 3, 90
…
И вот псевдокод, который генерирует текстовый файл:
for (planes.begin, numberOFplanes, planei++){
for(planes.begin+1, numberOFplanes, planej++){
if (planei intersect planej){
cout << ViVj << attribute << angle << nedl;
}
}
}
Я нашел ниже класс по этой ссылке (График реализации C ++) и хочу реализовать в своем коде, но я не знаю, как это сделать, точнее мне нужно дать номера плоскостей и их угол в качестве входных данных для класса графа для генерации графа.
постскриптум Я знаю, что графовый класс по ссылке — это направленный класс, и я не против генерировать неориентированный класс, оба или хорошо.
Не стесняйтесь поправлять меня, если я не поняла ту или иную мысль
Начнем с основных геометрических объектов, которые нам понадобятся:
//I considere here the one point + one orthogonal
//representation of a plan
class Plan{
public:
//Constructor
Node(const Point*& iPoint, const Vector*& iVector) {
_point = iPoint;
_vector = iVector;
}
float getAngleDifferencial(const Plan*& iPlan) {
//well my math are a bit old too do the math
//but you should be fine here... I hope :)
}
//you may wanna add getter or stuff like that
private:
Point* _point;
Vector* _vector;
}
Далее идут графические элементы:
class Node {
public:
Node(int iNumber,const Plan*& iPlan):
_Id(iNumber) {
_Plan = iPlan;
}
private:
int _Id;
Plan* _Plan;
}
class Edge {
public:
Edge(const Node*& iNode1,const Node*&iNode2) {
if (iNode1->getId()==iNode2->getId()) {
//throw Exception
}
_Node1 = iNode1;
_Node2 = iNode2;
_Weight = iNode1->getPlan()->getAngleDifferencial(iNode2->getPlan())
}
private:
Node* _Node1;
Node* _Node2;
float _Weight;
}
Наконец, вам нужно будет получить массив, чтобы разместить ваши ноды и ребра и начать играть с ним.
Повеселись 🙂
Других решений пока нет …