隣接リストでの作業->有向加重グラフ
1つのクラスは次のようになります。つまりヘッダー:
class CGraph;
class CMap {
public:
//voided constructors and destructors
//functions one is:
void SetDirGraph(string commands);
private:
CGraph* m_myMap;
};
2番目のクラス:
class CNode {
public:
//voided constructor and desctructor
int m_distance, m_vert;
bool m_isKnown;
};
typedef struct edges {
int v2, weight;
} edge;
class CGraph {
public:
CGraph(int map_size);
~CGraph(void);
void AddMap(int v1, int v2, int weight);
void AddEndVert(int v2, int weight);
private:
list<edge> List;
int size;
public:
CNode* verts;
};
ファイルから頂点を読み取っていますが、それは機能します。私の問題は、与えられたコードに基づいて隣接リストを作成するのに問題があることです。リストを指すポインタを最初に使用しようとしていますが、正しく機能していません。リストへのポインタを上書きせずに作成する方法がわかりません。
void CMap::SetDirGraph(string command) {
istringstream buffer(command)
char ch;
int num, vert1, vert2, weight; //specify vertices and weight and number of vertices
buffer>>ch; //throw away first character (not needed)
buffer>>num // size of vertices
while(!buffer.eof()) { // keep reading until end of line
buffer>>v1; // vertex start
buffer>>v2; // vertex end
buffer>>weight;
m_myMap = new CGraph(map_size); //initialize m_myMap.
m_myMap->verts->m_vert = v1; // mymap->verts->vert points to first edge
m_myMap->AddMap(v1, v2, weight); // create list?
m_myMap->AddEndVert(v2, weight); //create list? push v2 and weight on my list using my list.
}
}
私はいくつかの異なる方法を試しましたが、私は自分自身を混乱させ続けています。正しい方向のどのポイントも素晴らしいでしょう。
編集:作成する必要がある場合は、主要なものを公開するだけで、さらに多くのコードがあります。「機能しない」とは、前の頂点を上書きしているだけのことです。m_myMapを使用して配列を作成する必要があるかどうかわかりません(試しても上書きしてメモリエラーが発生します)。コンパイラエラーはありません。