1 25 39 package org.jgrapht.ext; 40 41 import java.io.*; 42 43 import java.util.*; 44 45 import org.jgrapht.*; 46 import org.jgrapht.util.*; 47 48 49 56 public class MatrixExporter<V, E> 57 { 58 59 61 private String delimiter = " "; 62 private String prefix = ""; 63 private String suffix = ""; 64 65 67 70 public MatrixExporter() 71 { 72 } 73 74 76 private void println( 77 PrintWriter out, 78 String fromName, 79 String toName, 80 String value) 81 { 82 out.println( 83 prefix + fromName + suffix + delimiter 84 + prefix + toName + suffix + delimiter 85 + prefix + value + suffix); 86 } 87 88 97 public void exportAdjacencyMatrix(Writer output, UndirectedGraph<V, E> g) 98 { 99 PrintWriter out = new PrintWriter(output); 100 101 VertexNameProvider<V> nameProvider = new IntegerNameProvider<V>(); 102 for (V from : g.vertexSet()) { 103 nameProvider.getVertexName(from); 105 } 106 107 for (V from : g.vertexSet()) { 108 exportAdjacencyMatrixVertex( 109 out, 110 nameProvider, 111 from, 112 Graphs.neighborListOf(g, from)); 113 } 114 115 out.flush(); 116 } 117 118 127 public void exportAdjacencyMatrix(Writer output, DirectedGraph<V, E> g) 128 { 129 PrintWriter out = new PrintWriter(output); 130 131 VertexNameProvider<V> nameProvider = new IntegerNameProvider<V>(); 132 for (V from : g.vertexSet()) { 133 nameProvider.getVertexName(from); 135 } 136 137 for (V from : g.vertexSet()) { 138 exportAdjacencyMatrixVertex( 139 out, 140 nameProvider, 141 from, 142 Graphs.successorListOf(g, from)); 143 } 144 145 out.flush(); 146 } 147 148 private void exportAdjacencyMatrixVertex( 149 PrintWriter out, 150 VertexNameProvider<V> nameProvider, 151 V from, 152 List<V> neighbors) 153 { 154 String fromName = nameProvider.getVertexName(from); 155 Map<String , ModifiableInteger> counts = 156 new LinkedHashMap<String , ModifiableInteger>(); 157 for (V to : neighbors) { 158 String toName = nameProvider.getVertexName(to); 159 ModifiableInteger count = counts.get(toName); 160 if (count == null) { 161 count = new ModifiableInteger(0); 162 counts.put(toName, count); 163 } 164 165 count.increment(); 166 if (from.equals(to)) { 167 count.increment(); 169 } 170 } 171 for (Map.Entry<String , ModifiableInteger> entry : counts.entrySet()) { 172 String toName = entry.getKey(); 173 ModifiableInteger count = entry.getValue(); 174 println(out, fromName, toName, count.toString()); 175 } 176 } 177 178 190 public void exportLaplacianMatrix(Writer output, UndirectedGraph<V, E> g) 191 { 192 PrintWriter out = new PrintWriter(output); 193 194 VertexNameProvider<V> nameProvider = new IntegerNameProvider<V>(); 195 for (V from : g.vertexSet()) { 196 nameProvider.getVertexName(from); 198 } 199 200 for (V from : g.vertexSet()) { 201 String fromName = nameProvider.getVertexName(from); 202 203 List<V> neighbors = Graphs.neighborListOf(g, from); 205 println( 206 out, 207 fromName, 208 fromName, 209 Integer.toString(neighbors.size())); 210 for (V to : neighbors) { 211 String toName = nameProvider.getVertexName(to); 212 println(out, fromName, toName, "-1"); 213 } 214 } 215 216 out.flush(); 217 } 218 219 231 public void exportNormalizedLaplacianMatrix( 232 Writer output, 233 UndirectedGraph<V, E> g) 234 { 235 PrintWriter out = new PrintWriter(output); 236 237 VertexNameProvider<V> nameProvider = new IntegerNameProvider<V>(); 238 for (V from : g.vertexSet()) { 239 nameProvider.getVertexName(from); 241 } 242 243 for (V from : g.vertexSet()) { 244 String fromName = nameProvider.getVertexName(from); 245 Set<V> neighbors = 246 new LinkedHashSet<V>(Graphs.neighborListOf(g, from)); 247 if (neighbors.isEmpty()) { 248 println(out, fromName, fromName, "0"); 249 } else { 250 println(out, fromName, fromName, "1"); 251 252 for (V to : neighbors) { 253 String toName = nameProvider.getVertexName(to); 254 double value = 255 -1 / Math.sqrt(g.degreeOf(from) * g.degreeOf(to)); 256 println(out, fromName, toName, Double.toString(value)); 257 } 258 } 259 } 260 261 out.flush(); 262 } 263 } 264 | Popular Tags |