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)
- }
- }
- }
|