[英]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;
}
}
如果您使用等於或大於n的x
索引,則會引發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.