【发布时间】:2013-06-15 14:33:38
【问题描述】:
我有关联矩阵,并基于它计算图中每个顶点的度数。
假设这是当前的关联矩阵:
-1 -1 1 0 1 0
1 0 -1 -1 0 1
0 1 0 1 -1 -1
行是顶点,列是边。 -1 表示边从顶点出来,+1 表示它进来。
如果这是无向图,则矩阵包含某种特定模式,如下所示:
-1 0 1 0 0 0
1 0 -1 0 0 0
0 0 0 0 0 0
两行 - 相同的顶点。两条边,指向不同。这是表示:
但是这样设计的:
在有向图中计算顶点的度数(与之相连的任何边)我只是在每一行中计算 -1 和 +1。那行得通。
问题是 - 在无向图中,度数在任何地方都乘以 2,因为矩阵自然地将线边“转换”为两个箭头边,如图所示。
问题是 -如果边是随机放置的,我如何降低度数,以便它使用关联矩阵计算一条线边而不是两条箭头边?
澄清一下,这是我想要的算法不能正常工作:
for(int i = 0; i < cols; i++)
{
int deg = 0;
for(int j = 0; j < rows; j++)
{
if(matrix[i][j] != 0) deg++;
}
std::cout << "Degree of " << i + 1 << " vertex is " << deg;
}
如何更改 if 指令以减少重复的反转列?
【问题讨论】:
-
顺便说一句。我必须创建新帐户才能发布此内容...每天 6 个帖子限制真是太搞笑了。
-
如果您每天需要在 SO 上发布超过 6 个问题,那么您 probably need to reconsider....
-
您不应该为无向图复制边。就像现在一样,你得到了正确的答案——你有两条边进出这些顶点。此外,paint 具有圆形、线条和类型工具,它使您的插图更具吸引力。
-
嗯,这很难回答,因为你可以应用很多策略:1)不重复 2)删除重复 3)按顶点排序,所以 2 列无向图将始终相邻.. .
-
如何删除重复项?那么我将无法创建一个关联矩阵......如果我不复制边缘,1 和 -1 会去哪里?