Advertisement
Bihim

Articulation Point

May 28th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.57 KB | None | 0 0
  1.  
  2. import java.io.*;
  3. import java.util.*;
  4. import java.util.LinkedList;
  5.  
  6. class Graph
  7. {
  8.     private int V;
  9.     private LinkedList<Integer> adj[];
  10.     int time = 0;
  11.     static final int NIL = -1;
  12.  
  13.  
  14.     Graph(int v)
  15.     {
  16.         V = v;
  17.         adj = new LinkedList[v];
  18.         for (int i=0; i<v; ++i)
  19.         {
  20.             adj[i] = new LinkedList();
  21.         }
  22.     }
  23.  
  24.  
  25.     void addEdge(int v, int w)
  26.     {
  27.         adj[v].add(w);
  28.         adj[w].add(v);
  29.     }
  30.  
  31.  
  32.     void APCheck(int u, boolean visited[], int discover[], int low[], int parent[], boolean ap[])
  33.     {
  34.         int children = 0;
  35.         visited[u] = true;
  36.         discover[u] = low[u] = ++time;
  37.         Iterator<Integer> i = adj[u].iterator();
  38.         while (i.hasNext())
  39.         {
  40.             int v = i.next();
  41.             if (!visited[v])
  42.             {
  43.                 children++;
  44.                 parent[v] = u;
  45.                 APCheck(v, visited, discover, low, parent, ap);
  46.  
  47.                 low[u]  = Math.min(low[u], low[v]);
  48.  
  49.                 if (parent[u] == NIL && children > 1)
  50.                 {
  51.                     ap[u] = true;
  52.                     //System.out.println(u);
  53.                 }
  54.  
  55.                 if (parent[u] != NIL && low[v] >= discover[u])
  56.                 {
  57.                     ap[u] = true;
  58.                     //System.out.println(u);
  59.                 }
  60.             }
  61.  
  62.  
  63.             else if (v != parent[u])
  64.             {
  65.                 low[u]  = Math.min(low[u], discover[v]);
  66.             }
  67.         }
  68.     }
  69.  
  70.  
  71.     void AP()
  72.     {
  73.  
  74.         boolean visited[] = new boolean[V];
  75.         int discover[] = new int[V];
  76.         int low[] = new int[V];
  77.         int parent[] = new int[V];
  78.         boolean ap[] = new boolean[V];
  79.  
  80.  
  81.         for (int i = 0; i < V; i++)
  82.         {
  83.             parent[i] = NIL;
  84.             visited[i] = false;
  85.             ap[i] = false;
  86.         }
  87.  
  88.  
  89.         for (int i = 0; i < V; i++)
  90.         {
  91.             if (visited[i] == false)
  92.             {
  93.                 APCheck(i, visited, discover, low, parent, ap);
  94.             }
  95.         }
  96.  
  97.  
  98.         for (int i = 0; i < V; i++)
  99.         {
  100.             if (ap[i] == true)
  101.             {
  102.                 System.out.print(i+" ");
  103.             }
  104.         }
  105.  
  106.     }
  107.  
  108.     // Driver method
  109.     public static void main(String args[])
  110.     {
  111.         System.out.println("Articulation points in Given graph");
  112.         Graph g4 = new Graph(6);
  113.         g4.addEdge(0,3);
  114.         g4.addEdge(0,2);
  115.         g4.addEdge(3,5);
  116.         g4.addEdge(3,1);
  117.         g4.addEdge(2,4);
  118.         g4.AP();
  119.  
  120.     }
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement