GraphDemo.java |
1 /**************************************************************************** 2 * This demo file is part of yFiles for Java 2.14. 3 * Copyright (c) 2000-2017 by yWorks GmbH, Vor dem Kreuzberg 28, 4 * 72070 Tuebingen, Germany. All rights reserved. 5 * 6 * yFiles demo files exhibit yFiles for Java functionalities. Any redistribution 7 * of demo files in source code or binary form, with or without 8 * modification, is not permitted. 9 * 10 * Owners of a valid software license for a yFiles for Java version that this 11 * demo is shipped with are allowed to use the demo source code as basis 12 * for their own yFiles for Java powered applications. Use of such programs is 13 * governed by the rights and conditions as set out in the yFiles for Java 14 * license agreement. 15 * 16 * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 19 * NO EVENT SHALL yWorks BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 21 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 ***************************************************************************/ 28 package demo.base; 29 30 import y.base.Graph; 31 import y.base.Node; 32 import y.base.Edge; 33 import y.base.NodeCursor; 34 import y.base.EdgeCursor; 35 36 import y.base.NodeMap; 37 import y.base.EdgeMap; 38 39 40 /** 41 * Demonstrates how to use the directed graph data type Graph. 42 * <p> 43 * <b>usage:</b> java demo.base.GraphDemo 44 * </p> 45 * 46 * @see <a href="http://docs.yworks.com/yfiles/doc/api/index.html#/dguide/base#Creating Graphs and Graph Elements" target="_blank">Section Creating Graphs and Graph Elements</a> in the yFiles for Java Developer's Guide 47 */ 48 public class GraphDemo 49 { 50 public GraphDemo() 51 { 52 //instantiates an empty graph 53 Graph graph = new Graph(); 54 55 //create a temporary node array for fast lookup 56 Node[] tmpNodes = new Node[5]; 57 58 //create some nodes in the graph and store references in the array 59 for(int i = 0; i < 5; i++) 60 { 61 tmpNodes[i] = graph.createNode(); 62 } 63 64 //create some edges in the graph 65 for(int i = 0; i < 5; i++) 66 { 67 for(int j = i+1; j < 5; j++) 68 { 69 //create an edge from node at index i to node at index j 70 graph.createEdge(tmpNodes[i],tmpNodes[j]); 71 } 72 } 73 74 75 //output the nodes of the graph 76 System.out.println("The nodes of the graph"); 77 for(NodeCursor nc = graph.nodes(); nc.ok(); nc.next()) 78 { 79 Node node = nc.node(); 80 System.out.println(node); 81 System.out.println("in edges #" + node.inDegree()); 82 for(EdgeCursor ec = node.inEdges(); ec.ok(); ec.next()) 83 { 84 System.out.println(ec.edge()); 85 } 86 System.out.println("out edges #" + node.outDegree()); 87 for(EdgeCursor ec = node.outEdges(); ec.ok(); ec.next()) 88 { 89 System.out.println(ec.edge()); 90 } 91 } 92 93 94 //output the edges of the graph 95 System.out.println("\nThe edges of the graph"); 96 for(EdgeCursor ec = graph.edges(); ec.ok(); ec.next()) 97 { 98 System.out.println(ec.edge()); 99 } 100 101 //reverse edges that have consecutive neighbors in graph 102 //reversing means switching source and target node 103 for(EdgeCursor ec = graph.edges(); ec.ok(); ec.next()) 104 { 105 if(Math.abs(ec.edge().source().index() - ec.edge().target().index()) == 1) 106 graph.reverseEdge(ec.edge()); 107 } 108 109 System.out.println("\nthe edges of the graph after some edge reversal"); 110 for(EdgeCursor ec = graph.edges(); ec.ok(); ec.next()) 111 { 112 System.out.println(ec.edge()); 113 } 114 115 /////////////////////////////////////////////////////////////////////////// 116 // Node- and EdgeMap handling /////////////////////////////////////////// 117 /////////////////////////////////////////////////////////////////////////// 118 119 //create a nodemap for the graph 120 NodeMap nodeMap = graph.createNodeMap(); 121 for(NodeCursor nc = graph.nodes(); nc.ok(); nc.next()) 122 { 123 //get node at current cursor position 124 Node node = nc.node(); 125 //associate descriptive String to the node via a nodemap 126 nodeMap.set(node,"this is node " + node.index()); 127 } 128 129 //create an edgemap for the graph 130 EdgeMap edgeMap = graph.createEdgeMap(); 131 for(EdgeCursor ec = graph.edges(); ec.ok(); ec.next()) 132 { 133 //get edge at current cursor position 134 Edge edge = ec.edge(); 135 //associate descriptive String to the edge via an edgemap 136 edgeMap.set(edge,"this is edge [" + 137 nodeMap.get(edge.source()) + "," + 138 nodeMap.get(edge.target()) + "]"); 139 } 140 141 //output the nodemap values of the nodes 142 System.out.println("\nThe node map values of the graph"); 143 for(NodeCursor nc = graph.nodes(); nc.ok(); nc.next()) 144 { 145 System.out.println(nodeMap.get(nc.node())); 146 } 147 148 //output the edges of the graph 149 System.out.println("\nThe edge map values of the graph"); 150 for(EdgeCursor ec = graph.edges(); ec.ok(); ec.next()) 151 { 152 System.out.println(edgeMap.get(ec.edge())); 153 } 154 155 //cleanup unneeded node and edge maps again (free resources) 156 graph.disposeNodeMap(nodeMap); 157 graph.disposeEdgeMap(edgeMap); 158 159 /////////////////////////////////////////////////////////////////////////// 160 // removing elements from the graph ////////////////////////////////////// 161 /////////////////////////////////////////////////////////////////////////// 162 163 for(NodeCursor nc = graph.nodes(); nc.ok(); nc.next()) 164 { 165 //remove node that has a edge degree > 2 166 if(nc.node().degree() > 2) 167 { 168 //removed the node and all of its adjacent edges from the graph 169 graph.removeNode(nc.node()); 170 } 171 } 172 System.out.println("\ngraph after some node removal"); 173 System.out.println(graph); 174 175 176 177 } 178 179 public static void main(String[] args) 180 { 181 new GraphDemo(); 182 } 183 } 184