これはグラフを作成する最初の試みであり、LL を使用してベクトル (またはノードまたは要素、それらが何と呼ばれていても) を接続することにしました。ノードのそれぞれには、ノードへのポインターを保持するベクトルがあります。グラフ クラスに「 addEdge 」関数を作成しましたが、プログラムが壊れているようです。私のaddElementクラスは、それらを完全に追加して出力するため、正常に機能しているようです。しかし、エッジを追加しようとすると、壊れます。デバッガーを実行しましたが、次の場所で壊れます
while(curr->next != NULL || curr->val != n)
理由はありますか?
#include "element.h"
#include "vector"
#include "iostream"
#include "functional"
using namespace std;
class Graph
{
public:
element *head;
Graph(int V)
{
head = NULL;
vector <element*> nodes;
}
void addElement(int val)
{
if (head == NULL)
{
element *newelement = new element(NULL, NULL, val);
head = newelement;
return ;
}
element *newelement = new element(NULL,NULL, val);
element *curr = head;
while(curr->next != NULL)
{
curr = curr->next;
}
curr->next = newelement;
newelement->prev = curr;
return;
}
void addEdge(int n, int edge)
{
element *e = head;
element *curr = head;
if(curr = NULL)
{
cout<<"There are no elements in your graph to connect";
return;
}
while(e->next != NULL || e->val != edge)
{
cout<<"Looking";
e = e->next;
}
if(e->val != edge)
{
cout<<"Your edge node doesn't exist";
return;
}
while(curr->next != NULL || curr->val != n)
{
cout<<"Looking for main node";
curr = curr->next;
}
if(curr->val != n)
{
cout<<"Could not find the main node";
return;
}
curr->edges.push_back(e);
cout<<"Edge connected";
return;
}
ノードクラス
#include "vector"
#include "iostream"
#include "functional"
using namespace std;
class element {
public:
element(element* n = NULL, element *p = NULL, int num = NULL)
{
val = num;
next = n;
prev = p;
}
int val;
element *prev;
element *next;
vector<element*> edges;
};