在C中读图?

时间:2013-11-13 18:23:14

标签: c graph nodes edges

所以说我有一个读图

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;
                }
            }

2 个答案:

答案 0 :(得分:0)

您将创建一个链接列表,该列表随着添加的每个节点动态增长 - 并一直持续到文件末尾。很多来自malloc的电话都会这样做。除非您现在展示了如何阅读数据,以及您的数据结构是什么,否则很难给出更详细的答案。

答案 1 :(得分:0)

取决于您的图表实现,如果您可以动态插入节点。对于每一行,读取两个节点,如果图中当前不存在一个或两个节点,则需要插入它们然后插入边缘。如果您使用矩阵表示,则需要不断调整大小并复制矩阵(错误)。如果您正在使用列表或队列表示,那么您需要遍历每个节点以查看它是否已为每个新行插入(坏,但不太糟糕)。对于有序列表,这稍微好一些,因为只要到达具有更高编号的节点,就可以停止并插入。此实现也不要求连续命名节点(即节点名称为1,2,5,19,20202,20203 ......的图表)