284 字
1 分钟
LeetCode-547. 省份数量
图论
有
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
并查集的方法
感觉是一个很神奇的方法
func findCircleNum(isConnected [][]int) int { n := len(isConnected)
parent := make([]int, n) for i := 0; i < n; i++ { parent[i] = i }
var find func(i int) int find = func(i int) int{ if parent[i] != i { parent[i] = find(parent[i]) } return parent[i] }
count := n for i := 0; i < n; i++ { for j := i+1; j < n; j++ { if isConnected[i][j] == 1 { rootI := find(i) rootJ := find(j) if rootI != rootJ { parent[rootI] = rootJ count-- } } } } return count} LeetCode-547. 省份数量
https://sheep44044.github.io/posts/算法/图论/leetcode-547-省份数量/

