簡體   English   中英

如何從節點中刪除所有“邊”?

[英]How do I remove all “edges” from a node?

我的comp sci class 的問題是這樣的:

我們可以使用“鄰接矩陣” int[][] matrix來表示圖。 如果存在從節點 i 到節點 j 的邊,則matrix[i][j]將非零。 換句話說,在這種情況下,節點 i 將節點 j 視為它的“鄰居”。 請注意,這並不一定意味着節點 j 將節點 i 視為 ITS 鄰居,從而允許不對稱關系。 每個值也可以為零,表示沒有邊緣/連接。 矩陣大小為 nxn,其中 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++) {
                                    ^

我不認為我解決問題的方式是正確的,但我至少試圖開始解決問題。

你已經接近解決方案了。 因為您有一個正方形n xn矩陣並將索引x固定在0.. n - 1范圍內,所以您想要刪除停留在第 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;
    }
}

如果您使用等於或大於nx索引,則會引發ArrayIndexOutOfBoundsException異常,由您決定如何處理這種情況。

您解決問題的方式是正確的,但不是最佳的。 來自 x 的邊意味着對於每個 j,matrix[x][j] 將為 0。 x 的邊意味着對於每個 i,matrix[i][x] 將為 0。 換句話說,i 或 j 為 x 的所有元素 matrix[i][j] 應該為 0。這就是你在做什么。

第一件事。 你的錯誤。 matrix[].length應該是matrix.length 試試你的解決方案。 它應該工作。

要獲得最佳解決方案,請檢查 Dariosicily 答案。 但是,對於那個,您需要確保矩陣是平方的並且x<n

您的答案將 go 覆蓋矩陣的每個元素,因此nxn= n^2元素的復雜度為O(n^2) ,但他的解決方案您只需要 go 超過2*n元素O(n) ,所以當 n 非常大,您會注意到性能改進。 你可以試試看:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM