// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU Lesser General Public License (LGPL): http://www.gnu.org/licenses/ package graphtea.library.algorithms.util; import graphtea.library.BaseEdge; import graphtea.library.BaseGraph; import graphtea.library.BaseVertex; import graphtea.library.algorithms.traversal.BreadthFirstSearch; import graphtea.library.exceptions.InvalidGraphException; import graphtea.library.exceptions.InvalidVertexException; import java.util.Iterator; /** * @author Omid Aladini */ public class ConnectivityChecker { /** * Checks whether the current graph is a connected graph. * * @return True if graph is connected and false otherwise. * @throws InvalidGraphException The invalid graph */ public static <VertexType extends BaseVertex, EdgeType extends BaseEdge<VertexType>> boolean isGraphConnected(BaseGraph<VertexType, EdgeType> graph) throws InvalidGraphException { try { Iterator<VertexType> it = graph.iterator(); if (!it.hasNext()) return true; new BreadthFirstSearch<>(graph).doSearch(it.next(), null); } catch (InvalidVertexException e) { throw new InvalidGraphException(); } for (VertexType v : graph) if (!v.getMark()) return false; return true; } }