Can be done using BFS. I tried this way - int NumProvinces(vector & adjMat) { q.push(0); for (int j = 0; j < numNodes; j++) { if (!visited[j]) { while (!q.empty()) { int curr = q.front(); q.pop(); for (int i = 0; i < numNodes; i++) { if (adjMat[curr][i] && !visited[i]) { q.push(i); visited[i] = true; } } } numProvince++; } } return numProvince; }