私は隣接リストの多くの実装を見てきました。ここでは、私はC++を使って実装しようとしています。あなたは私のC++の構造からわかるように、私は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
のcppファイル:
#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 [];'は無効です。 – NathanOliver
はい...私はそれを見ます。それが私がここで尋ねる理由です。私は頂点の配列を作ろうとしています。だから、どうやってそれに行きますか? –
あなたはどれくらい必要なのか分かりますか?配列を使用する代わりに、 'std :: vector'を考慮する必要があります。 – NathanOliver