1 25 40 package org.jgrapht.generate; 41 42 import java.util.*; 43 44 import org.jgrapht.*; 45 46 47 57 public class WheelGraphGenerator<V, E> 58 implements GraphGenerator<V, E, V> 59 { 60 61 63 66 public static final String HUB_VERTEX = "Hub Vertex"; 67 68 70 private boolean inwardSpokes; 71 private int size; 72 73 75 82 public WheelGraphGenerator(int size) 83 { 84 this(size, true); 85 } 86 87 96 public WheelGraphGenerator(int size, boolean inwardSpokes) 97 { 98 if (size < 0) { 99 throw new IllegalArgumentException ("must be non-negative"); 100 } 101 102 this.size = size; 103 this.inwardSpokes = inwardSpokes; 104 } 105 106 108 111 public void generateGraph( 112 Graph<V, E> target, 113 final VertexFactory<V> vertexFactory, 114 Map<String , V> resultMap) 115 { 116 if (size < 1) { 117 return; 118 } 119 120 final Collection<V> rim = new ArrayList<V>(); 124 VertexFactory<V> rimVertexFactory = 125 new VertexFactory<V>() { 126 public V createVertex() 127 { 128 V vertex = vertexFactory.createVertex(); 129 rim.add(vertex); 130 131 return vertex; 132 } 133 }; 134 135 RingGraphGenerator<V, E> ringGenerator = 136 new RingGraphGenerator<V, E>(size - 1); 137 ringGenerator.generateGraph(target, rimVertexFactory, resultMap); 138 139 V hubVertex = vertexFactory.createVertex(); 140 target.addVertex(hubVertex); 141 142 if (resultMap != null) { 143 resultMap.put(HUB_VERTEX, hubVertex); 144 } 145 146 for (V rimVertex : rim) { 147 if (inwardSpokes) { 148 target.addEdge(rimVertex, hubVertex); 149 } else { 150 target.addEdge(hubVertex, rimVertex); 151 } 152 } 153 } 154 } 155 | Popular Tags |