Here is the solution:
function dfs(u, matrix):
visited[u] = true
for v from 0 to n - 1:
if matrix[u][v] == 1 and not visited[v]:
dfs(v, matrix)
function findCircleNum(isConnected):
n = isConnected.length
visited = [false] * n
provinces = 0
for i from 0 to n - 1:
if not visited[i]:
provinces = provinces + 1
dfs(i, isConnected)
return provinces
This runs in time and uses space.