【发布时间】:2018-10-16 19:10:17
【问题描述】:
我有一个文本文件,其中一行上的第一个数字是图表的节点号,第二个数字是连接到第一个节点的节点号。第三个数字是边的权重。
这是一个示例,文件中的两行包含 3 和 5,权重为 0.5:
1 3 0.5
3 5 0.5
3 6 0.5
3 5 0.5
6 8 0.5
4 6 1
我希望能够将它们合并成一条与 3 和 5 有连接的线,但将权重更新为它们权重的总和(在本例中为 1)。然后应该删除重复的行。
所以我想检查重复的节点对,如果发现重复的节点对所有节点的总权重相加,然后更新该对的一行以获得正确的总权重,然后删除所有其他行节点。
我已经为 Edges 做了一个结构:
struct Edge {
int c1, c2;
float weight;
};
我已阅读文件并将它们全部放入此结构中:
if (updateGraph.is_open()) {
string data[3];
Edge e;
while (getline(updateGraph, stri)) {
stringstream in(stri);
int i = 0;
while (in.good() && i < 3) {
in >> data[i];
i++;
}
e.c1 = atoi(data[0].c_str());
e.c2 = atoi(data[1].c_str());
e.weight = atof(data[2].c_str());
cout << e.c1 << " " << e.c2 << " " << e.weight << endl;
}
}
但现在我不确定如何比较它们以查看是否有任何边缘具有相同的 c1 和 c2。我该怎么做?
【问题讨论】:
-
如果您需要代码方面的帮助,我们需要查看代码。另请阅读minimal reproducible example
-
我无法理解这里提出的问题。
-
提示:你使用
struct connection { int first,second; double weight; }总是先存储较小的索引 -
@user463035818 好的,我知道我会怎么做,这使得比较它们变得更加简单。一旦找到重复项,我就会明白如何使用该方法找到总重量,但我将如何知道要删除文本文件中的哪一行?
-
为什么要从输入文件中删除任何内容?如果您需要将结果输出写入文件,那么就这样做,但保留输入文件原样