nの都市があり、それらのいくつかは互いに接続されており、いくつかは接続されていません。都市aと都市bが直接接続されており、都市bが都市cに直接接続されている場合、都市aと都市cは間接的に接続されます。
州は、直接または間接的に接続された都市のグループであり、グループには他の接続されていない都市は含まれません。
nxn行列isConnectedを与えます。ここで、isConnected [i] [j] = 1は、i番目の都市とj番目の都市が直接接続されていることを意味し、isConnected [i] [j] = 0は、2つが直接接続されていないことを意味します。
マトリックス内の州の数を返します。
例1:
入力:isConnected = [[1,1,0]、[1,1,0]、[0,0,1]]
出力:2
例2:
入力:isConnected = [[1,0,0]、[0,1,0]、[0,0,1]]
出力:3
促す:
1 <= n <= 200
n == isConnected.length
n == isConnected [i] .length
isConnected [i] [j]是1または
0isConnected [i] [i] == 1
isConnected [i] [j] == isConnected [j] [i]
出典:LeetCode
リンク:https ://leetcode-cn.com/problems/number-of-provinces
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
アイデア:この質問は昨日よりも単純です。昨日表示されるはずです。dfsを使用してこの質問を書くと、非常に簡単です。公式の質問を投稿し、コレクションをチェックして学習します(学習テンプレートhhhh)
class Solution {
public int findCircleNum(int[][] isConnected) {
int provinces = isConnected.length;
int[] parent = new int[provinces];
for (int i = 0; i < provinces; i++) {
parent[i] = i;
}
for (int i = 0; i < provinces; i++) {
for (int j = i + 1; j < provinces; j++) {
if (isConnected[i][j] == 1) {
union(parent, i, j);
}
}
}
int circles = 0;
for (int i = 0; i < provinces; i++) {
if (parent[i] == i) {
circles++;
}
}
return circles;
}
public void union(int[] parent, int index1, int index2) {
parent[find(parent, index1)] = find(parent, index2);
}
public int find(int[] parent, int index) {
if (parent[index] != index) {
parent[index] = find(parent, parent[index]);
}
return parent[index];
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/number-of-provinces/solution/sheng-fen-shu-liang-by-leetcode-solution-eyk0/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。