输入格式如下
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;
}
答案 0 :(得分:0)
这是问题所在:
void readIn()
{
int g;
...
Graph(g);
编译器不喜欢你首先说“g
是int
”,然后说“g
是图表”。
答案 1 :(得分:0)
我认为您正在尝试使用g
初始化一个图形作为构造函数的参数但是您有一些困惑 -
Graph(g);
应该是
Graph myGraph(g);
答案 2 :(得分:-1)
您应该将readIng函数放在的Graph结构中,以便它可以访问其成员。你也可以使用
Graph graph(g);
而不是
Graph(g);