547.friend-circles.go 613 B

1234567891011121314151617181920212223242526272829303132333435
  1. func findCircleNum(M [][]int) int {
  2. n := len(M)
  3. if n == 0 {
  4. return 0
  5. }
  6. adj := make([][]int, n) // Much faster than the matrix M
  7. for i := 0; i < n; i++ {
  8. for j := i; j < n; j++ {
  9. if M[i][j] == 1 {
  10. adj[i] = append(adj[i], j)
  11. if i != j {
  12. adj[j] = append(adj[j], i)
  13. }
  14. }
  15. }
  16. }
  17. visited := make([]bool, n)
  18. cnt := 0
  19. for i := range adj {
  20. if !visited[i] && len(adj[i]) != 0 {
  21. dfs(adj, &visited, i)
  22. cnt++
  23. }
  24. }
  25. return cnt
  26. }
  27. func dfs(adj [][]int, visited *[]bool, i int) {
  28. (*visited)[i] = true
  29. for _, v := range adj[i] {
  30. if !(*visited)[v] {
  31. dfs(adj, visited, v)
  32. }
  33. }
  34. }