所以说我有一个读图
6 7
1 2 -2
2 3 -1
3 1 -4
3 4 -2
3 5 -3
6 4 -1
6 5 -4
其中第一行分别表示节点数和边数,其余部分读取边和权重。我知道如何阅读此图表中的输入。
我的问题是,如何在不指定第一行的节点数(或任何数量)的情况下读取此图的边和权重。例如,我将如何阅读此图表以执行相同的操作...
1 4 -4
2 3 3
1 2 -2
3 4 -2
2 1 1
谢谢!
Here is my current code
FILE *fin = fopen(argv[1], "r");
fscanf(fin, "%d", &n);
e = 0;
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j) {
fscanf(fin, "%d", &w);
if (w != 0) {
edges[e].u = i;
edges[e].v = j;
edges[e].w = w;
++e;
}
}
答案 0 :(得分:0)
您将创建一个链接列表,该列表随着添加的每个节点动态增长 - 并一直持续到文件末尾。很多来自malloc
的电话都会这样做。除非您现在展示了如何阅读数据,以及您的数据结构是什么,否则很难给出更详细的答案。
答案 1 :(得分:0)
取决于您的图表实现,如果您可以动态插入节点。对于每一行,读取两个节点,如果图中当前不存在一个或两个节点,则需要插入它们然后插入边缘。如果您使用矩阵表示,则需要不断调整大小并复制矩阵(错误)。如果您正在使用列表或队列表示,那么您需要遍历每个节点以查看它是否已为每个新行插入(坏,但不太糟糕)。对于有序列表,这稍微好一些,因为只要到达具有更高编号的节点,就可以停止并插入。此实现也不要求连续命名节点(即节点名称为1,2,5,19,20202,20203 ......的图表)