2012-04-16 18 views
11

Quiero crear un programa que cree un gráfico (para ser específico un gráfico de programa), que almacena valores en nodos y también almacena a qué otros nodos están conectados cada uno de los nodos.Creando un gráfico en java

Estoy pensando en hacer esto usando la lista vinculada. ¿Es esta la manera correcta de hacerlo? Cualquier otro consejo será gratamente apreciado.

Respuesta

21

En general, es una buena idea modelar su gráfico con una lista de adyacencia. Probablemente existan marcos para hacerlo, pero si le interesa la representación como ejercicio, generalmente quiere dos cosas. Primero, un HashMap que contiene todos sus nodos, la etiqueta de nodo para su nodo puede ser la clave, el nodo en sí es el valor.

La API de Java documenta HashMaps here.

En cada objeto de nodo, querrá una lista de nodos adyacentes a ese nodo. Esto se realiza mejor con ArrayList, que está documentado here.

Así es como podría organizarse.

import java.util.Hashmap; 
import java.util.ArrayList; 

class Node { 
    String label; 
    ArrayList<Node> adjacencyList; 
} 

HashMap<String, Node> graph = new HashMap<String, Node>(); 

La mayoría de los algoritmos que te gustaría ejecutar en un gráfico funcionarán bien en esta representación.

+0

Voy a intentar esto, muchas gracias. – user1079226

0

Puede escribir su propio objeto gráfico o usar algo como Jung.

1

Lo que está buscando parece ser un TreeNode API. En realidad, hay uno bueno dentro del paquete oscilante que ya está presente en Java SE, la implementación predeterminada es: javax.swing.tree.DefaultMutableTreeNode. Se puede usar fuera de una aplicación Swing y proporcionar un modelo TreeNode muy estándar.

Va a encontrar cada cosa para adaptarse a su necesidad: getChildren(), getParent(), setUserObject() etc ... y cada método recursivo para el rastreo y búsqueda sobre el árbol de nodos.

¡La buena noticia es que ganará la capacidad de escribir una interfaz de usuario de JTree en unos minutos!