如何完整地迭代一个完整图形的每个边缘?

时间:2015-06-26 18:08:12

标签: c++ for-loop graph

我想在完整图中设置所有边的权重([a] [b] = [b] [a] =随机整数)。为此,我写了这段代码:

for (i = 0; i < n; i++)
    {
        for (int j = 1; j < n; j++)
        {
            if (i != j)
            {
                w = std::rand() % 58 + 3;
                cout << i << ":" << j << " weight " << w << endl;
                graph[i][j] = graph[j][i] = w;
            }
        }
}

此处,n是顶点数。不幸的是,这并不是我想要的。我尝试为每条边分配一个权重,但此代码会为大多数边分配两个权重。例如,以下代码的示例输出为n = 4:

0:1
0:2
0:3
1:2
1:3
2:1
2:3
3:1
3:2

请注意,列出了0:3和3:0,因此边缘上将有两个不同的权重。我想改为列出这些边缘:

0:1
0:2
0:3
1:2
1:3
2:3

我该如何做到这一点?

1 个答案:

答案 0 :(得分:1)

执行您尝试做的事情的标准方法 - 迭代所有对而不重复 - 是改变for循环上的索引,如下所示:

load

这将恰好一次性地遍历所有不同节点对。它是通过强制该对的第一个组件小于第二个组件来实现的。

希望这有帮助!