赞
踩
目录
有 n
个城市,其中一些彼此相连,另一些没有相连。如果城市 a
与城市 b
直接相连,且城市 b
与城市 c
直接相连,那么城市 a
与城市 c
间接相连。
省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。
给你一个 n x n
的矩阵 isConnected
,其中 isConnected[i][j] = 1
表示第 i
个城市和第 j
个城市直接相连,而 isConnected[i][j] = 0
表示二者不直接相连。
返回矩阵中 省份 的数量。
示例 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
或 0
isConnected[i][i] == 1
isConnected[i][j] == isConnected[j][i]
- import java.util.HashSet;
- import java.util.Set;
-
- class Solution {
- int[] p = new int[210];
-
-
- public int find(int x) {
- if (p[x] != x) p[x] = find(p[x]);
- return p[x];
- }
- public int findCircleNum(int[][] isConnected) {
-
- int n = isConnected.length;
- int m = isConnected[0].length;
- // 初始化
- for (int i = 0; i < p.length; i++) {
- p[i] = i;
- }
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- if (isConnected[i][j] == 1 && i != j) {
- p[find(i)] = find(j);
- }
- }
- }
- HashSet<Integer> set = new HashSet<>();
- for (int i = 0; i < n; i++) {
- set.add(find(i));
- }
- return set.size();
- }
- }
简单的利用并查集而已。
原理请看我之前写的并查集详解。
Leetcode:684. 冗余连接(并查集C++)_树可以看成是一个连通且无环的无向图。 给定往一棵 n 个节点 (节点值 1~n) 的树-CSDN博客
然后注意这题,求的返回求根的种类即可,我这里用的set去重。over。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。