mirror of https://github.com/evanferrao/dsa
83 lines
1.8 KiB
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);
|
|
}
|
|
}
|