| 1234567891011121314151617181920212223242526272829303132333435 | func findCircleNum(M [][]int) int {	n := len(M)	if n == 0 {		return 0	}	adj := make([][]int, n) // Much faster than the matrix M	for i := 0; i < n; i++ {		for j := i; j < n; j++ {			if M[i][j] == 1 {				adj[i] = append(adj[i], j)				if i != j {					adj[j] = append(adj[j], i)				}			}		}	}	visited := make([]bool, n)	cnt := 0	for i := range adj {		if !visited[i] && len(adj[i]) != 0 {			dfs(adj, &visited, i)			cnt++		}	}	return cnt}func dfs(adj [][]int, visited *[]bool, i int) {	(*visited)[i] = true	for _, v := range adj[i] {		if !(*visited)[v] {			dfs(adj, visited, v)		}	}}
 |