Table of Contents
Problem Statement
Number of Provinces Leetcode Solution – We are given an adjacency matrix representation of a graph and need to find the number of provinces. Here province is a group of directly or indirectly connected cities and no other cities outside of the group.
Example
Example 1:
Input: isConnected = [[1,1,0],[1,1,0],[0,0,1]] Output: 2
Example 2:
Input: isConnected = [[1,0,0],[0,1,0],[0,0,1]] Output: 3
Explanation for Number of Provinces Leetcode Solution
- In the first eg. we can see there is an edge between 1 & 2, hence they are directly connected and counted as a single province. Node 3 is isolated and counted as a separate province. Therefore, there are 2 provinces.
- In the 2nd eg. None of them have any edge and hence 3 provinces
Approach
We can use the DFS algorithm to traverse all the nodes directly or indirectly connected to a specific node. We will run DFS only on the nodes that are not visited. Hence, this question boils down to finding the number of disconnected components in a graph. The number of times DFS runs will give us the number of provinces.
Code
C++ code for Number of Provinces
class Solution { void dfs(vector<vector<int>> &isConnected, vector<int> &vis, int u, int nodes) { // cout<<u<<" "; vis[u]=1; for(int v=0; v<nodes; v++) { if(u!=v && isConnected[u][v]==1) { if(!vis[v]) { dfs(isConnected, vis, v, nodes); } } } } public: int findCircleNum(vector<vector<int>>& isConnected) { int nodes = isConnected.size(); vector<int> vis(nodes, 0); int cnt=0; for(int i=0; i<nodes; i++) { if(!vis[i]) { cnt++; dfs(isConnected, vis, i, nodes); } } return cnt; } };
Java code for Number of Provinces
class Solution { public void dfs(int[][] isConnected, boolean[] vis, int u, int nodes) { vis[u]=true; for(int v=0; v<nodes; v++) { if(u!=v && isConnected[u][v]==1) { if(!vis[v]) { dfs(isConnected, vis, v, nodes); } } } } public int findCircleNum(int[][] isConnected) { int nodes = isConnected.length; boolean [] vis = new boolean[nodes]; int cnt = 0; for(int i=0; i<nodes; i++) { if(!vis[i]) { cnt++; dfs(isConnected, vis, i, nodes); } } return cnt; } }
Complexity Analysis for Number of Provinces LeetCode Solution
- Time complexity: O(n^2)
- The complete matrix (isConnected) of size n^2 is traversed.
- Space complexity: O(n)
- a visited array (vis) of size n is used.