1. BFS with Queue and Visited Array
Intuition
Queue-based breadth-first search marks all reachable cities level by level before returning to the outer loop.
Algorithm
- Initialize visited array of size n to false.
- Initialize provinces = 0.
- Loop i from 0 to n - 1:
- If !visited[i]:
- provinces++.
- Initialize queue q and push i, visited[i] = true.
- While queue is not empty:
- Pop u from q.
- For v from 0 to n - 1:
- If isConnected[u][v] == 1 and !visited[v]:
- visited[v] = true, push v into q.
- Return provinces.
#include <iostream>#include <vector>#include <queue> class Solution {public: int findCircleNum(std::vector<std::vector<int>>& isConnected) { int n = isConnected.size(); std::vector<bool> visited(n, false); int provinces = 0; for (int i = 0; i < n; ++i) { if (!visited[i]) { provinces++; std::queue<int> q; q.push(i); visited[i] = true; while (!q.empty()) { int u = q.front(); q.pop(); for (int v = 0; v < n; ++v) { if (isConnected[u][v] == 1 && !visited[v]) { visited[v] = true; q.push(v); } } } } } return provinces; }}; int main() { Solution sol; std::vector<std::vector<int>> isConnected = { {1, 1, 0}, {1, 1, 0}, {0, 0, 1} }; std::cout << "BFS Provinces Count: " << sol.findCircleNum(isConnected) << " (Expected: 2)\n"; return 0;}Time & Space Complexity
- Time complexity:
O(n^2) - Space complexity:
O(n)