输入格式如下。
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邻接中.EX。 Vertex 1将有两个List单元格,包含2 9.0和3 12.0。我还需要将1 9.0和1 12.0放入顶点2和3.但我无法弄清楚如何将数据存储到ListCells
代码:
#include <cstdio>
using namespace std;
typedef ListCell* List;
struct ListCell
{
ListCell* next;
int vertex;
double weight;
ListCell(int v, double w, ListCell* nxt)
{
vertex = v;
weight = w;
next = nxt;
}
};
struct Vertex
{
bool signaled;
long distance;
Vertex next;
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 n, p1, p2;
double edge;
scanf("%i ", &n);
Graph(n);
while(scanf("%i " &p1) != 0)
{
}
}
答案 0 :(得分:0)
我用来以适合业务逻辑的方式定义数据结构。
我建议您查看The Art of Computer programming,了解一些最佳做法。
关注“线性列表”一章
提示: 遍历列表并附加新节点(请处理极端情况):
Vertex* v = vertexInfo[i];
while (v->next!=null) {
v = v->next;
}
v->next = new Vertex(....);