Le concept du diagramme
Le graphique est l'expansion de l'arbre dans l'algorithme. L'arbre est une structure de données de haut en bas. Les nœuds ont un nœud parent (sauf le nœud racine), disposé de haut en bas. Le graphique n'a aucun concept de nœuds père-fils, et les nœuds du graphique sont tous des relations égales, ce qui rend le résultat encore plus compliqué.
Graphique non dirigé Graphique dirigé
La figure g = (v, e), où V représente le sommet, E représente le bord du bord, et un bord est une paire à virgule fixe (u, v), où (u, v) ∈V.
Au cours des deux derniers jours, j'ai rencontré un algorithme sur les graphiques. J'ai recherché en ligne pendant longtemps et je n'ai pas pu trouver la version Java des graphiques dans la structure de données et leurs opérations connexes. J'ai donc trouvé une version Java du livre de structure de données et je l'ai lu. Ce qui suit est un résumé du stockage de graphiques non dirigé et de la traversée de priorité en profondeur des graphiques compilés en fonction de l'explication du livre. Cependant, cette traversée ne peut que traverser le graphique connecté et traverser le graphique non connecté, il doit encore être modifié. J'espère que ce sera utile à ceux qui en ont besoin.
package com.homework; / ** * Définir la classe de pile * / class stackX {private final int size = 20; private int [] st; private int top; // initialize the stack public stackx () {st = new int [size]; top = -1;} // initialize the stack public void push (int j) {st [++ top] = j;} // ouvrir public int pop () {return st [); Élément supérieur de la pile public int pic () {return st [top];} // Déterminez si la pile est vide publique boolean isEmpty () {return (top == - 1);}} / ** * définir la classe de nœud dans le graphique * @Author Administrator * * / class Vertex {public char label; public booolean was vissit WasVisited = false;}} / ** * Définissez la classe graphique * @Author Administrator * * / classe graphique {private final int num = 20; private vertex vertexlist []; // nœud array private int adjmat [] []; // node matrix private int nverts; // le nombre actuel de nœud private stackx thestack; // définit une pile // Graph () {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;}} // ajouter le nœud advertex (Char Lab) {vertexlist [nd ++] Vertex (lab);} // ajouter un bord entre deux nœuds public void addge (int start, int fin) {adjmat [start] [fin] = 1; adjmat [fin] [start] = 1;} // publier un certain nœud public voidVerTex (int v) {System.out.Print (VertexList [v] .Label);} // Get Some Point Public int. getAdJunVisitedVertex (int v) {for (int j = 0; j <nverts; j ++) {if (adjmat [v] [j] == 1 && vertexlist [j] .wasvisited == false) return j;} return -1;} // profonde priority priority Traversal (dfs) public vide public dfs () {vertexList [0] .wasvisited = true; displayVertex (0); thestack = new StackX (); thestack.push (0); while (! thestack.isempty ()) {int v = getAdjunVisitedVertex (thestack.peak ()); if (v == - 1) // si le nœud n'existe pas thestack.pop (); else {vertexList [v] .wasvisited = true; displayVertex (v); thestack.push (v);}} pour (int j = 0; j <nverts; j ++) vertexlist [j] .wasvisited = false;}} public class graphconnect {public static void main (String [] args) {{graph graph 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 ("The Order Visité: "); thegraph.dfs (); System.out.println ();}}} Résultats de l'exécution du programme:
L'ordre visité: en d'abandon
Résumer
Ce qui précède est toutes les explications détaillées du Code d'opération de stockage et DFS de la programmation Java Structure de graphiques non dirigée. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à ce site:
La programmation Java implémente la recherche en profondeur basée sur le graphique et la recherche en profondeur de recherche complète
Exemple de code d'implémentation Java en profondeur-première et largeur
Code de conversion de programmation Java pour deux structures de menu d'arborescence
S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!