我有一个邻接矩阵。例如,以下,
+---+-------------------------------+
| | 1 2 3 4 5 |
+---+-------------------------------+
| 1 | 0 1 0 0 0 |
| 2 | 1 0 0 0 1 |
| 3 | 0 0 0 1 0 |
| 4 | 0 0 1 0 1 |
| 5 | 0 1 0 1 0 |
+---+-------------------------------+
我们如何提取以下邻接矩阵,没有for循环,其中每个元素(行或列)添加了已存在的邻居的邻居?例如,元素3
与元素4
相邻,因此在新的邻接矩阵中,元素3
将具有元素4
和5
的邻居。
+---+-------------------------------+
| | 1 2 3 4 5 |
+---+-------------------------------+
| 1 | 0 1 0 0 1 |
| 2 | 1 0 0 1 1 |
| 3 | 0 0 0 1 1 |
| 4 | 0 1 1 0 1 |
| 5 | 1 1 1 1 0 |
+---+-------------------------------+
致以最诚挚的问候,
透特
答案 0 :(得分:1)
如果A是你的邻接矩阵,那么你想要的矩阵是A2,其中:
A2 = (A+A^2) > 0
这是因为邻接矩阵的平方具有分量s_ij,其中s_ij是i和j之间的长度为2的路径的数量。 (In fact (A^n)_ij is the number of paths from i to j of length n)。
因此,如果您添加A(其中包含由长度为1的路径连接的所有对)到A ^ 2,其中包含由长度为2的路径链接的所有对,您将获得长度为多少的路径1或2.(我们只关心这种情况是否正面)。长度为2的路径是邻居邻居的路径。
您可能希望将对角线设置为零,但