LeetCode 547 省份數量

2021-10-22 12:04:44 字數 1379 閱讀 9896

有 n 個城市,其中一些彼此相連,另一些沒有相連。如果城市 a 與城市 b 直接相連,且城市 b 與城市 c 直接相連,那麼城市 a 與城市 c 間接相連。

省份 是一組直接或間接相連的城市,組內不含其他沒有相連的城市。

給你乙個 n x n 的矩陣 isconnected ,其中 isconnected[i][j] = 1 表示第 i 個城市和第 j 個城市直接相連,而 isconnected[i][j] = 0 表示二者不直接相連。

返回矩陣中 省份 的數量。

由於前幾天一直在看並查集。當看到這道題的時候,第一時間想到的就是使用並查集來解答,首先複習一下並查集,先將兩個有關聯的數通過乙個陣列連線起來,這個連線的操作就是並查集裡的兩個函式join()和find()。find可以找到x的祖先,由於是查詢祖先,所以在查詢的過程中可以將一些數的祖先賦為乙個值。join通過呼叫find函式,將兩個數連線在一起如果兩個數祖先不相同,則將乙個數的祖先變成另乙個數的祖先。

class

solution

//visited用來表示i好是否已經遍歷過

boolean

visited =

newboolean

[n];

for(

int i =

0; i < n; i++)}

}int index =

0, count =0;

//count表示城市的數目

while

(index < n)

for(

int i = index +

1; i < n; i++)}

count +=1;

index++;}

return count;

}//用來連線連個有關聯的數

public

void

join

(int x,

int y)

}//查詢x的祖先並進行賦值

public

intfind

(int x)

int i = x;

while

(pre[i]

!= father)

return father;

}//其實還有乙個簡單的find方法,但是由於使用遞迴的方法,效率比較底下

/* public void find(int x)

return pre[x];}*/

}

LeetCode 547 省份數量

題目鏈結 有 n 個城市,其中一些彼此相連,另一些沒有相連。如果城市 a 與城市 b 直接相連,且城市 b 與城市 c 直接相連,那麼城市 a 與城市 c 間接相連。省份 是一組直接或間接相連的城市,組內不含其他沒有相連的城市。給你乙個 n x n 的矩陣 isconnected 其中 isconn...

leetcode547(省份數量 並查集)

有 n 個城市,其中一些彼此相連,另一些沒有相連。如果城市 a 與城市 b 直接相連,且城市 b 與城市 c 直接相連,那麼城市 a 與城市 c 間接相連。省份 是一組直接或間接相連的城市,組內不含其他沒有相連的城市。給你乙個 n x n 的矩陣 isconnected 其中 isconnected...

547 省份數量

有 n 個城市,其中一些彼此相連,另一些沒有相連。如果城市 a 與城市 b 直接相連,且城市 b 與城市 c 直接相連,那麼城市 a 與城市 c 間接相連。省份 是一組直接或間接相連的城市,組內不含其他沒有相連的城市。給你乙個 n x n 的矩陣 isconnected 其中 isconnected...