Я видел много реализаций списка смежности. Здесь я пытаюсь реализовать это с помощью С++. Как вы можете понять из моей структуры C++, я новичок в C++. Здесь я изо всех сил пытаюсь запустить свой код. Моя текущая проблема в том, что она не проходит через весь график. и я получаю ошибку сегментации. Результат:
вершина: 0
1->
вершина: 1
2->3->
вершина: 2
вершина: 3
вершина: 4
Ошибка сегментации
Мне нужна помощь, чтобы запустить это. Я хочу реализовать алгоритм DFS. Любые советы будут отличными!!!
Вот заголовок:
#ifndef DFS_H
#define DFS_H
class DFS{
private:
struct vertex{
int data;
bool visited;
struct vertex* next;
};
int V;
struct vertex* G[20];
public:
DFS(int vertices);
vertex* addVertex(int data);
void addEdge(int index, int data);
void dfs(int vertex);
void printGraph();
};
#endif
СРР-файл:
#include "DFS.h"
#include <iostream>
#include <cstdlib>
using namespace std;
DFS:: DFS(int vertices){
this->V=vertices;
for(int i=0; i<V; i++){
G[i]= NULL;
}
}
DFS::vertex* DFS::addVertex(int data){
struct vertex* newNode= new vertex;
newNode->data= data;
newNode->next= NULL;
newNode->visited=false;
return newNode;
}
void DFS:: addEdge(int index, int data){
struct vertex* cursor;
struct vertex* newVertex= addVertex(data);
if(G[index]==NULL)
G[index]=newVertex;
else{
cursor=G[index];
while(cursor->next!=NULL)
cursor=cursor->next;
cursor->next= newVertex;
}
}
void DFS::printGraph(){
for(int i=0; i<V; i++){
struct vertex* cursor= G[i];
cout<<"vertex: "<<i<<endl;
while(cursor->next!=NULL){
cout<<cursor->data<<"->";
cursor=cursor->next;
}
cout<<endl;
}
}
void DFS:: dfs(int vertex){
}
int main(){
DFS dfs(5);
dfs.addEdge(0,1);
dfs.addEdge(0,4);
dfs.addEdge(1,2);
dfs.addEdge(1,3);
dfs.addEdge(1,4);
dfs.addEdge(2,3);
dfs.addEdge(3,4);
dfs.printGraph();
return 0;
}
*
Спасибо за помощь сообществу Stackoverflow!
struct vertex* G[];
недействителен. - person NathanOliver   schedule 19.09.2016std::vector
. - person NathanOliver   schedule 19.09.2016int
,int*
иint[]
. Пока вы не освоите это, не пытайтесьvertex[]
. И пока вы не освоите это, не пытайтесь использовать DFS. - person Beta   schedule 19.09.2016C
программиста, пытающегося написатьC++
(ключевое словоstruct
, используемое в разных местах, является мертвой раздачей, это может быть так), или вы получили код от очень старого (или очень плохая) книга C++ или образец. Ваш класс вершин выглядит какstd::forward_list
, поэтому все, что вам нужно, это std::forward_list‹vertex› и избавьтесь от переменной-членаnext
в вершине, так как в ней нет необходимости, если используется forward_list. - person PaulMcKenzie   schedule 19.09.2016std::vector
для реализации динамического массива, и большинство, если не все, эти проблемы исчезнут. - person PaulMcKenzie   schedule 19.09.2016new[] / delete[]
повсюду — у нас было бы знание, чтобы инкапсулировать их в наш собственный класс и согласованно управлять памятью. Это отвечает на ваш вопрос? - person PaulMcKenzie   schedule 20.09.2016