El concepto del diagrama
El gráfico es la expansión del árbol en el algoritmo. El árbol es una estructura de datos de arriba a abajo. Los nodos tienen un nodo principal (excepto el nodo raíz), dispuesto de arriba a abajo. El gráfico no tiene un concepto de nodos padre-hijo, y los nodos en el gráfico son relaciones iguales, lo que hace que el resultado sea aún más complicado.
Gráfico de gráfico no dirigido dirigido
Figura G = (V, E), donde V representa el vértice, E representa el borde del borde y un borde es un par de puntos fijos (U, V), donde (U, V) ∈V.
En los últimos dos días, encontré un algoritmo sobre gráficos. Busqué en línea durante mucho tiempo y no pude encontrar la versión Java de los gráficos en la estructura de datos y sus operaciones relacionadas. Así que encontré una versión Java del libro de estructura de datos y la leí. El siguiente es un resumen del almacenamiento de gráficos no dirigido y la prioridad de profundidad de los gráficos compilados según la explicación del libro. Sin embargo, este recorrido solo puede atravesar el gráfico conectado y para atravesar el gráfico no conectado, aún debe modificarse. Espero que sea útil para los necesitados.
paquete com.homework;/*** Definir la clase de pila*/class stackx {private final int size = 20; private int [] st; private int top; // Inicializar la pila pública stackx () {st = new int [size]; top = -1;} // Inicializar el público de pila Void (int j) {st [++ top] = j;} // abre int hop () {{) st [top-];} // Devuelve el elemento superior del stack public int peak () {return st [top];} // Determine si la pila está vacía pública boolean isEtimty () {return (top ==-1);}}/** * Defina la clase de nodo en el gráfico * @author administrador * */vertex de clase pública {público vertet público lab) {etiqueta = lab; wasVisited = false;}}/** * Defina la clase de gráfico * @author administrador * */class gráfico {private final int num = 20; private vértice vertexlist []; // nodo array private int adjmat [] []; // nodo matriz int nverts private ints; // el número actual de nodos privado stackx stackx thestack; // define a stack // la estructura de la inicialización de la inicialización; Gráfico () {verTexList = new Vertex [num]; adjmat = new int [num] [num]; nverts = 0; for (int i = 0; i <num; i ++) {for (int j = 0; j <num; j ++) adjmat [i] [j] = 0;}} // agregue el nodo público Vértice (lab);} // Agregue un borde entre dos nodos public void agregado (int inicio, int end) {adjmat [start] [end] = 1; adjmat [end] [inicio] = 1;} // emitir un nodo público público void visualverex (int v) {system.out.print (vertexlist [v] .label);}/} // get a inque con respecto a los puntos no obtener algo de no obtener getAdJunVisitedvertex (int v) {for (int j = 0; j <nverts; j ++) {if (adjmat [v] [j] == 1 && vertexlist [j] .wasVisited == false) return j;} return -1;} // Derecha de prioridad profunda (DFS) public Void Void dfs () {vertexlist [0] .wasVisited = true; displayversex (0); thestack = new stackx (); thestack.push (0); while (! thestack.isEmpty ()) {int v = getAdjunVisitedvertex (thestack.peak ()); if (v ==-1) // Si el nodo no existe thestack.pop (); else {VERTEXLIST [V] .WASVISITE = True; Discipleverx (v); thestack.push (v);}} para (int j = 0; j <nverts; j ++) vertexList [j] .wasVisited = false;}} public class Graphconnect {public static void main (string [] args) {{gráfico theGraph = new Graph (); theGraph.addvertex ('a'); theGraph.addvertex ('b'); theGraph.addvertex ('c'); theGraph.addvertex ('d'); theGraph.addvertex ('e'); theGraph.Addedge (0, 1); // ab thegraph.addedge (1, 2); // bc theGraph.addedge (0, 3); // ad theGraph.addedge (3, 4); // de theGraph.addedge (2, 4); // ce system.out.print ("El orden del orden visitado: "); thegraph.dfs (); system.out.println ();}}} Resultados del programa en ejecución:
La orden visitada: Abced
Resumir
Lo anterior es toda la explicación detallada del código de operación de almacenamiento y DFS de la estructura de gráficos de programación Java no dirigida. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a este sitio:
La programación de Java implementa la búsqueda de profundidad gráfica primero y la búsqueda de amplitud primero código completo
Ejemplo de código de implementación Java de profundidad y amplitud
Código de conversión de programación de Java para estructuras de menú de dos árboles
Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!