有 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...