我想在完整图中设置所有边的权重([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
我该如何做到这一点?
答案 0 :(得分:1)
执行您尝试做的事情的标准方法 - 迭代所有对而不重复 - 是改变for循环上的索引,如下所示:
load
这将恰好一次性地遍历所有不同节点对。它是通过强制该对的第一个组件小于第二个组件来实现的。
希望这有帮助!