Tengo una clase java que implementa una cola prioritaria. Luego tengo una prueba de clase que genera un gráfico como este:
digraph G {
Milan (0.0) -> Turin (1.2)
Milan (0.0) -> Montreal (7.0)
Turin (1.2) -> Paris (5.8)
Turin (1.2) -> Tokyo (2.2)
}
Este gráfico se guarda en un archivo llamado "cola".
Ahora deseo que este gráfico se muestre en una imagen PNG usando Graphviz. Entonces, la última llamada de mis archivos de prueba (después de haber creado y llenado la cola con prioridad) es:
queue.toString("queue");
Todo bien. El método toString es el siguiente:
public void toString(String fileDot){
try {
FileOutputStream file = new FileOutputStream(fileDot);
PrintStream Output = new PrintStream(file);
Output.print(this.printQueue());
Output.close();
File f = new File(fileDot);
String arg1 = f.getAbsolutePath();
String arg2 = arg1 + ".png";
String[] c = {"dot", "-Tpng", arg1, "-o", arg2};
Process p = Runtime.getRuntime().exec(c);
int err = p.waitFor();
}
catch(IOException e1) {
System.out.println(e1);
}
catch(InterruptedException e2) {
System.out.println(e2);
}
}
private String printQueue() throws IOException {
String g = new String("");
char c = '"';
g = g.concat("digraph G {\n");
if(isEmpty())
g = g.concat(" " + "Empty priority queue.");
else {
for(int i = 0; i < lastIndex; i++) {
if(heap[2 * i] != null) {
g = g.concat("" + heap[i].elem + " (" + heap[i].prior + ") " + " " + " -> " + " " + "" + heap[i * 2].elem + " (" + heap[i * 2].prior + ") \n" );
if(heap[2 * i + 1] != null)
g = g.concat("" + heap[i].elem + " (" + heap[i].prior + ") " + " " + " -> " + " " + "" + heap[i * 2 + 1].elem + " (" + heap[i * 2 + 1].prior + ") \n" );
}
} //end for
} //end else
g = g.concat("}");
return g;
}
¿Por qué no se genera la imagen .png? Donde me equivoco Por supuesto que instalé Graphviz. Gracias
Cuando ejecuté el .dot
archivo anterior dot
en la línea de comando, obtuve:
$ dot -Tpng queue.dot -oqueue.png
Warning: queue.dot:2: syntax error in line 2 near '('
Por lo tanto, los números entre paréntesis en los nombres de los nodos no son válidos en dot
sintaxis. Si los elimina, espero que el .png
archivo se cree con éxito. Si necesita los números entre paréntesis en su salida, sugiero buscar etiquetas de nodo en la documentación de GraphViz.
También señalaría que toString()
no parece un nombre particularmente claro para una función que crea un .png
archivo, por lo que podría ser aconsejable cambiar el nombre de la función.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras