O conceito de diagrama
O gráfico é a expansão da árvore no algoritmo. A árvore é uma estrutura de dados de cima para baixo. Os nós têm um nó pai (exceto o nó raiz), dispostos de cima para baixo. O gráfico não possui conceito de nós de pai e filho, e os nós no gráfico são todos relacionamentos iguais, o que torna o resultado ainda mais complicado.
Gráfico não direcionado gráfico direcionado
Figura G = (v, e), onde v representa o vértice, e representa a borda da borda e uma borda é um par de ponto fixo (u, v), onde (u, v) ∈V.
Nos últimos dois dias, encontrei um algoritmo sobre gráficos. Pesquisei on -line por um longo tempo e não consegui encontrar a versão Java dos gráficos na estrutura de dados e suas operações relacionadas. Então, encontrei uma versão Java do livro da estrutura de dados e a li. A seguir, é apresentado um resumo do armazenamento de gráficos não direcionado e da pervertida de prioridade de profundidade de gráficos compilados com base na explicação no livro. No entanto, essa travessia só pode atravessar o gráfico conectado e atravessar o gráfico não conectado, ele ainda precisa ser modificado. Espero que seja útil para os necessitados.
pacote com.homework;/*** Definir a classe de pilha*/classe Stackx {private final int size = 20; private int [] st; private int top; // inicialize o pilha public stackx () {st = new int [size]; top = -1;} // inicialize a pilha pública da pilha (int j) (st [st top) st [top-];} // retorna o elemento superior do pilha public int Peak () {return st [top];} // Determine se a pilha está vazia pública booleana isEmpty () {return (top ==-1);}}/** * define a classe do nó na classe Gráfico * @author administrador * */class {** * lab) {Label = lab; wasvisited = false;}}/** * Definir a classe de gráfico * @Author Administrator * */classe Graph {private final int num = 20; private vértice vertexlist []; // Array de nó privado int adjmat [] []; Graph () {vertexList = new Vertex [num]; adjmat = new int [num] [num]; nverts = 0; para (int i = 0; i <num; i ++) {for (int j = 0; j <num; j ++) adjmat [i] [j] = 0;}}} // Vértice (lab);} // Adicione uma borda entre dois nós public void adiciona (int start, int end) {adjmat [start] [end] = 1; adjmat [end] [start] = 1;} // saída de um determinado nó public void DisplayVerTex (int) {SystemuSer)/alguma (veja de alteaxlist [v]. getadjunvisitedvertex (int v) {for (int j = 0; j <nverts; j ++) {if (adjmat [v] [j] == 1 && vertexlist [j] .wasvisited == false) retornar j;} retornar -1; dfs () {vertexList [0] .wasvisited = true; DisplayVertex (0); theStack = new Stackx (); theStack.push (0); while (! theStack.isEmpty ()) {int v = getadjunvisitedVertex (theStack.peak ()); if (v ==-1) // se o nó não existir theStack.pop (); else {vertexlist [v] .wasvisited = true; displayvertex (v); theStack.push (v);}} para (int j = 0; j <nverts; j ++) vertexlist [j] .wasvisited = false;}} public class GraphConnect {public static void main (string [] args) {{graphgraph = 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); // system.out.print ("A ordem visitado: "); thegraph.dfs (); system.out.println ();}}} Resultados da execução do programa:
A ordem visitada: ABCED
Resumir
O exposto acima é toda a explicação detalhada do código de operação de armazenamento e DFS da estrutura gráfica de programação Java. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a este site:
A programação Java implementa a profundidade baseada em gráficos e a primeira pesquisa e o código completo de pesquisa da largura
Exemplo de Código de Implementação Java de profundidade e largura e largura
Código de conversão de programação Java para duas estruturas de menu de árvores
Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!