private void BridgeUtil(Vertex<T> vertex, Set<Edge<T>> result,Map<Vertex<T>,Integer> discovery,
            Map<Vertex<T>,Integer> low,Map<Vertex<T>,Vertex<T>> parent,Map<Vertex<T>,Boolean> visited){
        visited.put(vertex, true);
        discovery.put(vertex, time);
        low.put(vertex, time);
        time++;
        for(Vertex<T> child : vertex.getAdjacentVertexes()){
            if(!visited.containsKey(child)){
                parent.put(child, vertex);
                BridgeUtil(child,result,discovery,low,parent,visited);
                
                if(discovery.get(vertex) < low.get(child) ){
                    result.add(new Edge<T>(vertex,child));
                }
                low.put(vertex, Math.min(discovery.get(vertex), low.get(child)));
            }else{
                if(!child.equals(parent.get(vertex))){
                    low.put(vertex,Math.min(discovery.get(vertex), low.get(child)));
                }
            }
        }
    }
http://www.geeksforgeeks.org/bridge-in-a-graph/
src/com/interview/graph/Bridge.java