001 // GraphLab Project: http://graphlab.sharif.edu 002 // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology 003 // Distributed under the terms of the GNU Lesser General Public License (LGPL): http://www.gnu.org/licenses/ 004 005 /** 006 * TestMatrixGraph.java 007 * 008 * Created on November 15, 2004, 4:30 AM 009 */ 010 011 package graphlab.library.test; 012 013 import graphlab.library.BaseEdge; 014 import graphlab.library.BaseEdgeProperties; 015 import graphlab.library.BaseVertex; 016 import graphlab.library.MatrixGraph; 017 import graphlab.library.algorithms.traversal.BreadthFirstSearch; 018 import graphlab.library.algorithms.traversal.DepthFirstSearch; 019 import graphlab.library.event.handlers.PreWorkPostWorkHandler; 020 import graphlab.library.genericcloners.BaseEdgeVertexCopier; 021 022 import java.util.Comparator; 023 import java.util.Iterator; 024 025 /** 026 * @author Omid Aladini 027 */ 028 public class TestMatrixGraph { 029 030 static class SampleTraversalHandler implements PreWorkPostWorkHandler<BaseVertex> { 031 public boolean doPreWork(BaseVertex fromVertex, BaseVertex toVertex) { 032 System.out.print("->" + toVertex.getId()); 033 return false; 034 } 035 036 public boolean doPostWork(BaseVertex returnFrom, BaseVertex returnTo) { 037 System.out.println("<-" + returnTo.getId()); 038 return false; 039 } 040 041 } 042 043 /* 044 * This class is for comparing two edges according to their weights. 045 * @author Omid Aladini 046 */ 047 public static class BaseEdgeWeightComparator 048 implements Comparator<BaseEdge<BaseVertex>> { 049 public int compare(BaseEdge<BaseVertex> o1, BaseEdge<BaseVertex> o2) { 050 if (o1.getWeight() < o2.getWeight()) 051 return -1; 052 else if (o1.getWeight() == o2.getWeight()) 053 return 0; 054 else 055 return 1; 056 } 057 } 058 059 public static void main(String args[]) { 060 try { 061 MatrixGraph<BaseVertex, BaseEdge<BaseVertex>> myList = new MatrixGraph<BaseVertex, BaseEdge<BaseVertex>>(); 062 BaseVertex v0 = new BaseVertex(); 063 BaseVertex v1 = new BaseVertex(); 064 BaseVertex v2 = new BaseVertex(); 065 066 myList.insertVertex(v0); 067 myList.insertVertex(v1); 068 myList.insertVertex(v2); 069 070 myList.insertEdge(new BaseEdge<BaseVertex>(v0, v1, new BaseEdgeProperties(0, 5, false))); 071 myList.insertEdge(new BaseEdge<BaseVertex>(v1, v2, new BaseEdgeProperties(0, 1, false))); 072 myList.insertEdge(new BaseEdge<BaseVertex>(v2, v0, new BaseEdgeProperties(0, 2, false))); 073 myList.dump(); 074 075 BaseVertex v3 = new BaseVertex(); 076 077 myList.insertVertex(v3); 078 myList.insertEdge(new BaseEdge<BaseVertex>(v2, v3, new BaseEdgeProperties(0, 1, false))); 079 myList.insertEdge(new BaseEdge<BaseVertex>(v0, v1, new BaseEdgeProperties(0, 20, false))); 080 System.out.println("||---"); 081 myList.dump(); 082 System.out.println("||---"); 083 myList.copy(new BaseEdgeVertexCopier()).dump(); 084 System.out.println("TestMatrixGraph graph traversal"); 085 System.out.println("\nDFS"); 086 087 BaseVertex v = myList.getAVertex(); 088 089 Iterator<BaseEdge<BaseVertex>> eIterator = myList.edgeIterator(); 090 System.out.print('\n'); 091 while (eIterator.hasNext()) { 092 BaseEdge e = eIterator.next(); 093 System.out.println("An Edge from:" + e.source.getId() + " to:" + e.target.getId()); 094 } 095 096 System.out.println("\nPrim Algorithm on this graph:"); 097 myList.dump(); 098 //prim output has been changed 099 // new Prim<BaseVertex,BaseEdge<BaseVertex>>(myList, new BaseEdgeVertexGraphConverter()). 100 // findMinimumSpanningTree(myList.getAVertex(),new BaseEdgeWeightComparator()).dump(); 101 102 //System.out.println("\nRemoving a vertex " + myList.getVerticesCount()); 103 //myList.removeVertex(v); 104 105 System.out.println("\nBefore traversal"); 106 new DepthFirstSearch<BaseVertex, BaseEdge<BaseVertex>>(myList).doSearch(v, new SampleTraversalHandler()); 107 new BreadthFirstSearch<BaseVertex, BaseEdge<BaseVertex>>(myList).doSearch(v, new SampleTraversalHandler()); 108 109 } catch (Exception e) { 110 System.out.println("Noooooo:"); 111 e.printStackTrace(); 112 } 113 } 114 115 }