Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.*;
- import java.util.LinkedList;
- class Graph
- {
- private int V;
- private LinkedList<Integer> adj[];
- int time = 0;
- static final int NIL = -1;
- Graph(int v)
- {
- V = v;
- adj = new LinkedList[v];
- for (int i=0; i<v; ++i)
- {
- adj[i] = new LinkedList();
- }
- }
- void addEdge(int v, int w)
- {
- adj[v].add(w);
- adj[w].add(v);
- }
- void APCheck(int u, boolean visited[], int discover[], int low[], int parent[], boolean ap[])
- {
- int children = 0;
- visited[u] = true;
- discover[u] = low[u] = ++time;
- Iterator<Integer> i = adj[u].iterator();
- while (i.hasNext())
- {
- int v = i.next();
- if (!visited[v])
- {
- children++;
- parent[v] = u;
- APCheck(v, visited, discover, low, parent, ap);
- low[u] = Math.min(low[u], low[v]);
- if (parent[u] == NIL && children > 1)
- {
- ap[u] = true;
- //System.out.println(u);
- }
- if (parent[u] != NIL && low[v] >= discover[u])
- {
- ap[u] = true;
- //System.out.println(u);
- }
- }
- else if (v != parent[u])
- {
- low[u] = Math.min(low[u], discover[v]);
- }
- }
- }
- void AP()
- {
- boolean visited[] = new boolean[V];
- int discover[] = new int[V];
- int low[] = new int[V];
- int parent[] = new int[V];
- boolean ap[] = new boolean[V];
- for (int i = 0; i < V; i++)
- {
- parent[i] = NIL;
- visited[i] = false;
- ap[i] = false;
- }
- for (int i = 0; i < V; i++)
- {
- if (visited[i] == false)
- {
- APCheck(i, visited, discover, low, parent, ap);
- }
- }
- for (int i = 0; i < V; i++)
- {
- if (ap[i] == true)
- {
- System.out.print(i+" ");
- }
- }
- }
- // Driver method
- public static void main(String args[])
- {
- System.out.println("Articulation points in Given graph");
- Graph g4 = new Graph(6);
- g4.addEdge(0,3);
- g4.addEdge(0,2);
- g4.addEdge(3,5);
- g4.addEdge(3,1);
- g4.addEdge(2,4);
- g4.AP();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement