Создание графа списка смежности из топологии в переполнении стека

Как новичок в 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 ++) и хочу реализовать в своем коде, но я не знаю, как это сделать, точнее мне нужно дать номера плоскостей и их угол в качестве входных данных для класса графа для генерации графа.

постскриптум Я знаю, что графовый класс по ссылке — это направленный класс, и я не против генерировать неориентированный класс, оба или хорошо.

0

Решение

Не стесняйтесь поправлять меня, если я не поняла ту или иную мысль

Начнем с основных геометрических объектов, которые нам понадобятся:

//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;
}

Наконец, вам нужно будет получить массив, чтобы разместить ваши ноды и ребра и начать играть с ним.

Повеселись 🙂

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]