Linked-List C ++,

时间:2014-03-19 20:05:08

标签: c++ arrays graph linked-list

输入格式如下

5
1 2  9.0
1 3 12.0
2 4 18.0
2 3  6.0
2 5 20.0
3 5 15.0
0
1 5

第一个数字是图表中的顶点数。然后下一行最多为0是图的边缘。第一个和第二个数字是顶点,第三个数字是边缘在它们之间的距离。尝试读取数据并将边缘存储到该顶点的List邻接中的位置。此示例将生成具有五个顶点的图形,其边缘为1到2& 3。 2到4& 3& 1等。我不知道存储到readIn函数列表中的格式是否正确(myGraph.vertexInfo[p1].adjacency -> vertex=p2;)。

myGraph.vertexInfo[p1].adjacency -> vertex=p2;是否存储它的正确方法?不是我如何将信息存储到每个顶点的邻接列表中?输入四个数字后,我也收到了分段错误。

#include <cstdio>
using namespace std;

struct ListCell
{
   ListCell* next;
   int vertex;
   double weight;

   ListCell(int v, double w, ListCell* nxt)
   {
      vertex = v;
      weight = w;
      next = nxt;
   }
};

typedef ListCell* List;

struct Vertex
{
   bool signaled;
   long distance;
   List adjacency;    
};

struct Graph
{
   int     numVertices;
   Vertex* vertexInfo;

   Graph(int n)
   {
      numVertices = n;
      vertexInfo  = new Vertex[n+1];
      for(int i = 1; i <= n; i++)
      {
         vertexInfo[i].signaled = false;
      }
   }
};

//==============================================================
//                   readIn
//==============================================================
// 
//==============================================================

void readIn()
{
   int g;
   int p1;
   int p2;
   float edge;
   scanf("%i ", &g);

   Graph myGraph(g);
   scanf("%i", &p1);
   while(p1 != 0)
   {
      scanf("%i", &p2);
      scanf("%f", &edge);         
      myGraph.vertexInfo[p1].adjacency -> vertex=p2; 
      myGraph.vertexInfo[p2].adjacency -> vertex=p1;
      myGraph.vertexInfo[p1].adjacency -> weight=edge; 
      myGraph.vertexInfo[p2].adjacency -> weight=edge;
      scanf("%i", &p1);
   }
}
//==============================================================
//                   main
//==============================================================

int main(int argc, char** argv)
{
   readIn();
   return 0;
}

3 个答案:

答案 0 :(得分:0)

这是问题所在:

void readIn()
{
   int g;

   ...

   Graph(g);

编译器不喜欢你首先说“gint”,然后说“g是图表”。

答案 1 :(得分:0)

我认为您正在尝试使用g初始化一个图形作为构造函数的参数但是您有一些困惑 -

Graph(g);

应该是

Graph myGraph(g);

答案 2 :(得分:-1)

您应该将readIng函数放在的Graph结构中,以便它可以访问其成员。你也可以使用

Graph graph(g);

而不是

Graph(g);