domingo, 18 de septiembre de 2011

Cómo generar grafos desde Graphviz en C++



Graphviz es un programa generador de grafos. Es open source y es independiente del lenguaje de programación que le llame, pero acá veremos cómo utilizarlo para generar grafos desde un programa en C++

Antes que nada, debemos instalar Graphviz, ya sea por consola:

sudo apt-get install graphviz

o directamente descargándolo desde la página de Graphviz: www.graphviz.org/Download..php


Una vez instalado, lo siguiente que debemos hacer es crear un fichero con extensión .dot, que será donde le mandaremos los parámetros a Graphviz para que genere el grafo. Allí podemos especificar el número de nodos, aristas y demás.
El formato del fichero debe ser algo similar a esto:

digraph G {
/* El padre tiene un hijo y
una hija: */
padre -> hijo;
padre -> hija;
}

Luego de tener el archivo listo, debemos llamar a la herramienta dot, que se encargará de compilar el archivo y transformar el fichero en una imagen.
En C++ podemos hacerlo con el comando system:

system("dot -Tpng nombre_de_fichero.dot -o nombre_de_imagen_generada.png");

y para abrir la imagen generada:

system("nohup display ruta_y_nombre_de_imagen_generada.png &" );

La imagen que generada por Graphviz será parecida a esta:




Graphviz puede generar grafos en varios diseños y formatos, como SVG para páginas web, PDF o Postscript, también soporta GXL y XML

Les dejo un manual de uso de Graphviz para descargar aqui

6 comentarios:

  1. disculpa sabes como se podria generar un grafo en svg implementando la funcion de C:

    char*grafica_genera_svg(structgrafica*a,func_a_cadena f);

    ResponderEliminar
    Respuestas
    1. un poco tarde la respuesta, pero puedes intentar con el parametro -Tsvg
      Puedes leer la documentación en: www.graphviz.org/doc/info/output.html#ID

      Eliminar
  2. En la llamada system("dot ....") me sale error , no reconoce el comando dot. Pero lo hago por consola y si me reconoce, cuál es el problema ?

    ResponderEliminar
  3. Tienes que explicar con realizarlo en c++ la sintaxis de graphvi

    ResponderEliminar

Gracias por tu comentario! :)