C++ 链表C++;,

C++ 链表C++;,,c++,arrays,graph,linked-list,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的下一行是图形的边。第一个和第二个数字是顶点,第三个数字是它们之间的边有多远。尝试读入数据并将边存储到该顶点的列表邻接位置中。此示例将生成一个包含五个顶点的图形,这些顶点的边从1到2和3。2到4&3&1等。我不知道在我的readIn函数中存储到列表中的格式是否正确(myGraph.vertexInfo[p1]。邻接

输入采用以下格式

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的下一行是图形的边。第一个和第二个数字是顶点,第三个数字是它们之间的边有多远。尝试读入数据并将边存储到该顶点的列表邻接位置中。此示例将生成一个包含五个顶点的图形,这些顶点的边从1到2和3。2到4&3&1等。我不知道在我的
readIn
函数中存储到列表中的格式是否正确(
myGraph.vertexInfo[p1]。邻接->vertex=p2;

是myGraph.vertexInfo[p1]。邻接->顶点=p2正确的存储方式?Ff不知道如何将信息存储到每个顶点的邻接列表中?另外,在输入四个数字后,我得到了一个分段错误

#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;
}
#包括
使用名称空间std;
结构列表单元
{
列表单元格*下一步;
int顶点;
双倍重量;
ListCell(整数v,双w,ListCell*nxt)
{
顶点=v;
重量=w;
next=nxt;
}
};
typedef ListCell*列表;
结构顶点
{
布尔示意;
长途;
列表邻接;
};
结构图
{
智力;
顶点*顶点信息;
图(int n)
{
数值=n;
vertexInfo=新顶点[n+1];
对于(int i=1;i顶点=p2;
myGraph.vertexInfo[p2]。邻接->顶点=p1;
myGraph.vertexInfo[p1]。邻接->权重=边;
myGraph.vertexInfo[p2]。邻接->权重=边;
scanf(“%i”&p1);
}
}
//==============================================================
//主要
//==============================================================
int main(int argc,字符**argv)
{
readIn();
返回0;
}
这就是问题所在:

void readIn()
{
   int g;

   ...

   Graph(g);

编译器不喜欢你先说“
g
是一个
int
”,然后说“
g
是一个图形”

我想你是想用
g
作为构造函数的参数来初始化一个图形,但是你有点搞混了-

图形(g);

应该是


Graph myGraph(g);

您应该将readIn函数放在图形结构中,以便它可以访问其成员。您还可以使用

Graph graph(g);
而不是

Graph(g);

你的全班同学都被这个问题困住了吗?在过去的几天里,我在堆栈溢出上至少看到过三次。你发布的错误应该很容易理解和修复。有不少错误是。我们只讨论了链接列表一两天。然后我们的常规老师休假了一个月,所以我们有一个填充。你没有声明Gr这里的aph变量
Graph(g)
。请尝试
Graph gr(g)
;感谢codah的帮助。将
myGraph.vertexInfo[p1].adjacenty->vertex=p2;
用于将信息存储到邻接列表中?检查您的声明检查上面的注释。因此,要存储在与图的每个顶点相关联的链表中,我将执行
myGraph.vertexInfo[p1].adjacency->vertex=p2;
在中读取时?它以这种方式符合要求,但这并不意味着它是正确的。