dsa/Graphs/NumberOfProvinces.java

83 lines
1.8 KiB
Java

import java.util.*;
import java.io.*;
class NumberOfProvinces {
// DFS
public static void dfs(int node, boolean visited[], ArrayList<ArrayList<Integer>> adj){
visited[node] = true;
for (Integer it: adj.get(node)){
if (!visited[it]){
dfs(it, visited, adj);
}
}
}
// BFS
public static void bfs(int start, boolean visited[], ArrayList<ArrayList<Integer>> adj){
Queue<Integer> q = new LinkedList<>();
q.add(start);
visited[start] = true;
while(!q.isEmpty()){
Integer node = q.poll();
for(Integer it : adj.get(node)){
if(!visited[it]){
visited[it] = true;
q.add(it);
}
}
}
}
// PROVINCE COUNT
static int numProvinces(int[][] matrix, int V) {
// convert adjacency matrix -> adjacency list
ArrayList<ArrayList<Integer>> adj = new ArrayList<>();
for(int i=0;i<V;i++) adj.add(new ArrayList<>());
for(int i=0;i<V;i++){
for(int j=0;j<V;j++){
if(matrix[i][j] == 1 && i != j){
adj.get(i).add(j);
}
}
}
boolean visited[] = new boolean[V];
int count = 0;
for(int i=0;i<V;i++){
if(!visited[i]){
count++;
// choose one
dfs(i, visited, adj);
// bfs(i, visited, adj);
}
}
return count;
}
// DRIVER
public static void main(String[] args) {
int[][] matrix = {
{1,0,1},
{0,1,0},
{1,0,1}
};
int V = matrix.length;
int ans = numProvinces(matrix, V);
System.out.println(ans);
}
}