// 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.test; import graphtea.library.BaseEdge; import graphtea.library.BaseEdgeProperties; import graphtea.library.BaseVertex; import graphtea.library.MatrixGraph; import graphtea.library.algorithms.traversal.BreadthFirstSearch; import graphtea.library.algorithms.traversal.DepthFirstSearch; import graphtea.library.event.handlers.PreWorkPostWorkHandler; import graphtea.library.genericcloners.BaseEdgeVertexCopier; import java.util.Comparator; import java.util.Iterator; /** * TestMatrixGraph.java * * Created on November 15, 2004, 4:30 AM * @author Omid Aladini */ public class TestMatrixGraph { static class SampleTraversalHandler implements PreWorkPostWorkHandler<BaseVertex> { public boolean doPreWork(BaseVertex fromVertex, BaseVertex toVertex) { System.out.print("->" + toVertex.getId()); return false; } public boolean doPostWork(BaseVertex returnFrom, BaseVertex returnTo) { System.out.println("<-" + returnTo.getId()); return false; } } /* * This class is for comparing two edges according to their weights. * @author Omid Aladini */ public static class BaseEdgeWeightComparator implements Comparator<BaseEdge<BaseVertex>> { public int compare(BaseEdge<BaseVertex> o1, BaseEdge<BaseVertex> o2) { if (o1.getWeight() < o2.getWeight()) return -1; else if (o1.getWeight() == o2.getWeight()) return 0; else return 1; } } public static void main(String args[]) { try { MatrixGraph<BaseVertex, BaseEdge<BaseVertex>> myList = new MatrixGraph<>(); BaseVertex v0 = new BaseVertex(); BaseVertex v1 = new BaseVertex(); BaseVertex v2 = new BaseVertex(); myList.insertVertex(v0); myList.insertVertex(v1); myList.insertVertex(v2); myList.insertEdge(new BaseEdge<>(v0, v1, new BaseEdgeProperties(0, 5, false))); myList.insertEdge(new BaseEdge<>(v1, v2, new BaseEdgeProperties(0, 1, false))); myList.insertEdge(new BaseEdge<>(v2, v0, new BaseEdgeProperties(0, 2, false))); myList.dump(); BaseVertex v3 = new BaseVertex(); myList.insertVertex(v3); myList.insertEdge(new BaseEdge<>(v2, v3, new BaseEdgeProperties(0, 1, false))); myList.insertEdge(new BaseEdge<>(v0, v1, new BaseEdgeProperties(0, 20, false))); System.out.println("||---"); myList.dump(); System.out.println("||---"); myList.copy(new BaseEdgeVertexCopier()).dump(); System.out.println("TestMatrixGraph graph traversal"); System.out.println("\nDFS"); BaseVertex v = myList.getAVertex(); Iterator<BaseEdge<BaseVertex>> eIterator = myList.edgeIterator(); System.out.print('\n'); while (eIterator.hasNext()) { BaseEdge e = eIterator.next(); System.out.println("An Edge from:" + e.source.getId() + " to:" + e.target.getId()); } System.out.println("\nPrim Algorithm on this graph:"); myList.dump(); //prim output has been changed // new Prim<BaseVertex,BaseEdge<BaseVertex>>(myList, new BaseEdgeVertexGraphConverter()). // findMinimumSpanningTree(myList.getAVertex(),new BaseEdgeWeightComparator()).dump(); //System.out.println("\nRemoving a vertex " + myList.getVerticesCount()); //myList.removeVertex(v); System.out.println("\nBefore traversal"); new DepthFirstSearch<>(myList).doSearch(v, new SampleTraversalHandler()); new BreadthFirstSearch<>(myList).doSearch(v, new SampleTraversalHandler()); } catch (Exception e) { System.out.println("Noooooo:"); e.printStackTrace(); } } }