我有关联矩阵,并基于它计算图中每个顶点的度数。
假设这是当前的关联矩阵:
-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 指令以减少重复的反转列?