0

所以说我有一个图表,上面写着

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

2 回答 2

0

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

于 2013-11-13T18:38:17.393 回答
0

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

于 2013-11-13T18:39:03.090 回答