#include <stack>
#include <vector>
class Solution {
public:
int findCircleNum(std::vector<std::vector<int>>& isConnected) {
std::stack<int> toVisit;
std::vector<bool> visited(isConnected.size(), false);
int province = 0;
for (int city = 0; city < isConnected.size(); city++) {
if (visited[city]) continue;
province++;
toVisit.push(city);
while (!toVisit.empty()) {
int c = toVisit.top();
toVisit.pop();
visited[c] = true;
for (int nc = 0; nc < isConnected[c].size(); nc++) {
if (!visited[nc] && nc != c && isConnected[c][nc] == 1) toVisit.push(nc);
}
}
}
return province;
}
};