【问题标题】:How do I remove all "edges" from a node?如何从节点中删除所有“边”?
【发布时间】:2020-07-29 03:19:41
【问题描述】:

我的 comp sci 课程的一个问题是这样的:

我们可以使用“邻接矩阵”int[][] matrix 来表示图。如果存在从节点 i 到节点 j 的边,matrix[i][j] 将非零。换句话说,在这种情况下,节点 i 将节点 j 视为它的“邻居”。请注意,这并不一定意味着节点 j 将节点 i 视为 ITS 邻居,从而允许不对称关系。每个值也可以为零,表示没有边缘/连接。矩阵大小为 n x n,其中 n 是节点数,节点编号为 0 到 n-1,允许任何节点连接到此范围内编号的任何其他节点。

给定一个邻接矩阵和int x,删除索引 x 处节点的所有边。

我了解邻接矩阵是什么,但我不了解问题的边是什么意思,或者索引 x 是什么。

到目前为止,我的代码如下所示:

public void removeEdgesFromNode(int[][] matrix, int x) {
    for(int i = 0; i < matrix.length; i++) {
        
        
        for(int j = 0; j < matrix[].length; j++) {
            if(j == x || i == x) {
                matrix[i, j] = 0;
            }
        }
    }   
}

出现错误

Compilation error on line 7: error: class expected
        for(int j = 0; j < matrix[].length; j++) {
                                    ^

我不认为我解决问题的方式是正确的,但至少我正在尝试开始解决问题。

【问题讨论】:

  • j &lt; matrix[].length -> j &lt; matrix[0].length
  • 你不需要嵌套循环。只需一个循环即可清除matrix[i][x]matrix[x][i],其中i 是迭代索引。

标签: java arrays nodes adjacency-matrix


【解决方案1】:

您解决问题的方法是正确的,但不是最佳的。 来自 x 的边意味着对于每个 j,matrix[x][j] 将为 0。 x 的边意味着对于每个 i,matrix[i][x] 将为 0。 换句话说,所有元素 matrix[i][j],其中 i 或 j 是 x,应该是 0。这就是你在做什么。

首先要做的事情。你的错误。 matrix[].length 应该是 matrix.length。试试你的解决方案。它应该可以工作。

要获得最佳解决方案,请查看 Dariosicily 答案。但是,您需要确保矩阵是平方的并且x&lt;n

你的答案会遍历矩阵的每个元素,所以nxn= n^2元素复杂O(n^2),但他的解决方案你只需要遍历2*n元素O(n),所以当n很大时,你会注意到性能改进。你可以试试看:)

【讨论】:

    【解决方案2】:

    您已接近解决方案。因为您有一个方形 n x n 矩阵并在 0 .. n - 1 范围内固定了一个索引x,所以您希望删除所有停留在第 x 行或第 x 列你可以用一个循环来完成,如下所示:

    public static void removeEdgesFromNode(int[][] matrix, int x) {
        int n = matrix.length;
            
        for (int i = 0; i < n; ++i) {
            matrix[i][x] = 0;
            matrix[x][i] = 0;
        }
    }
    

    如果您使用的x 索引等于或大于n,则会引发ArrayIndexOutOfBoundsException 异常,由您决定如何处理这种情况。

    【讨论】:

      猜你喜欢
      • 2012-11-29
      • 2011-12-18
      • 2018-04-18
      • 2022-08-08
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      相关资源
      最近更新 更多