1 25 40 package org.jgrapht.experimental; 42 43 import java.util.*; 44 45 import org.jgrapht.*; 46 import org.jgrapht.generate.*; 47 48 49 59 public class PartiteRandomGraphGenerator<V, E> 60 implements GraphGenerator<V, E, Object []> 61 { 62 63 65 private final int [] numVertices; 66 private final int numEdges; 67 68 70 79 public PartiteRandomGraphGenerator( 80 int numVertices1, 81 int numVertices2, 82 int numEdges) 83 { 84 if ((numVertices1 < 0) || (numVertices2 < 0)) { 85 throw new IllegalArgumentException ("must be non-negative"); 86 } 87 88 if ((numEdges < 0) || (numEdges > (numVertices1 * numVertices2))) { 89 throw new IllegalArgumentException ("illegal number of edges"); 90 } 91 92 final int [] numVertices = { 93 numVertices1, 94 numVertices2 95 }; 96 this.numVertices = numVertices; 97 this.numEdges = numEdges; 98 } 99 100 109 public PartiteRandomGraphGenerator(int [] numVertices, int numEdges) 110 { 111 if (numEdges < 0) { 112 throw new IllegalArgumentException ("illegal number of edges"); 113 } 114 115 for (int i = 0; i < numVertices.length; i++) { 116 if (numVertices[i] < 0) { 117 throw new IllegalArgumentException ("must be non-negative"); 118 } 119 120 for (int j = 0; j < i; j++) { 121 if (numEdges > (numVertices[i] * numVertices[j])) { 122 throw new IllegalArgumentException ( 123 "illegal number of edges"); 124 } 125 } 126 } 127 128 this.numVertices = numVertices; 129 this.numEdges = numEdges; 130 } 131 132 134 143 public void generateGraph( 144 Graph<V, E> target, 145 VertexFactory<V> vertexFactory, 146 Map<String , Object []> resultMap) 147 { 148 Object [][] vertices = new Object [numVertices.length][]; 149 150 for (int i = 0; i < numVertices.length; i++) { 151 vertices[i] = 152 RandomGraphHelper.addVertices( 153 target, 154 vertexFactory, 155 numVertices[i]); 156 157 if (resultMap != null) { 158 resultMap.put(Integer.toString(i), vertices[i]); 159 } 160 161 for (int j = 0; j < i; j++) { 162 RandomGraphHelper.addEdges( 163 target, 164 Arrays.asList(vertices[i]), 165 Arrays.asList(vertices[j]), 166 numEdges); 167 } 168 } 169 } 170 } 171 | Popular Tags |