Priorité de profondeur Transfert
La traversée de priorité en profondeur est similaire à la marche d'un labyrinthe par une personne:
Comme indiqué sur la figure, sélectionnez un bord parmi le point de départ pour marcher vers le sommet suivant. Avant d'atteindre un sommet, il est marqué que ce sommet soit arrivé.
Lorsqu'un sommet marqué arrive, retombez au sommet précédent, puis sélectionnez un sommet qui n'a pas été atteint.
Continuez à se retirer lorsqu'il n'y a pas de passage vers l'intersection qui a été retirée.
Pour le composant connecté , regardez le concept: le sous-graphique extrêmement connecté du graphique non dirigé G est appelé composant connecté de G. Il n'y a qu'un seul composant connecté de tout graphique connecté, c'est-à-dire lui-même, et le graphique non dirigée non connecté a plusieurs composants connectés.
Jetons un coup d'œil aux exemples spécifiques:
Package com.datastructure.graph; // Trouvez le composant Unicom de la classe publique de graphe non autorisée {graphique privé Graph; Composants (graphique graphique) {this.graph = graph; composantCount = 0; // Le nombre initial de composants connectés est 0 visité = new booléen [graph.v ()]; mark = new int [graph.v ()]; for (int i = 0; i <graph.v (); i ++) {visité [i] = false; // L'état initial de l'accès de la Node est falscark [i] = -1; Le composant connecté du nœud est marqué comme -1} pour (int i = 0; i <graph.v (); i ++) {// La traversée de priorité de profondeur du nœud non visitée if (! Visité [i]) {dfs (i); ComponentCount ++; // après dfs à un nœud à la fin, un composant connecté se termine, i) {Visité [i] = true; // nœud i a été accessible mark [i] = composantCount; // nœud i appartient au nombre actuel de composants connectés (marques) pour (nœud int: graph.adjacentNode (i)) {// Traite les nœuds adjacents du nœud I dans le graphique if (! visité [nœud]) // dfsdfs (nœud); Boolean isConned (int v, int w) {return mark [v] == mark [w]; // juger si les deux nœuds sont connectés en fonction des marques des composants connectés auxquels les deux nœuds appartiennent à} public int getComponentCount () {Return ComponentCount (// Renvoie le nombre de composants connectés dans le graphique}} // Composants publics {///////; // référence du graphique // booléen privé [] visité; // si le nœud est accessible pendant le processus DFS // private int CCount; // Enregistrer le nombre de composants China Unicom // ID privé int []; // La marque de composante China Unicom correspondante pour chaque nœud //// // profondeur de profondeur Transfert du graphique // dfs privé void (int v) {//// visité [v] = true; // L'état d'accès du nœud v est défini sur true // id [v] = cCount; // La marque Unicom de Chine correspondante du nœud v est définie sur CCOUNT //// // traversant le point d'adjacence du nœud v i // for (int i: g.adjacentnode (v)) {// // si le point d'adjacence, je n'ai pas encore été accessible // if (! I //] // // // Depth Travers Dfs (i); //} //} /// // Constructeur pour trouver les composants connectés du graphique injuste // composants publics (graphique graphique) {//// // algorithme Initialisation // g = graphique; //// // a visité le statut accessible du nœud dans le graphique de stockage du tableau G // Visité = new Boolean [gv ()); composants connectés auxquels le nœud appartient au graphique de stockage du tableau g // id = new int [gv ()]; //// // // le nombre de composants connectés est initialisé à 0 // ccount = 0; //// // définir tous les tableaux visités sur false; Définissez tous les tableaux d'ID sur -1 // pour (int i = 0; i <gv (); i ++) {// visité [i] = false; // id [i] = -1; //} /// // trouver le composant Unicom du graphique // pour (int i = 0; i <gv (); i ++) // // accéder à un nœud qui n'a pas été accessible //! // // Profondeur Priority Traversal // dfs (i); // ccount ++; //} //} /// renvoie le nombre de composants UNICOM du graphique // int count () {// Renvoie CCOUNT; //} //// // interroger si le point V et le point sont connectés (w les marques des composants communicants du NODE V et West le même / bool / les marques des composants communicants du NODE V et West le même / Bools des marques de composants communicants de NODE V et West le même / bool / les marques des composants communicants du NODE V et West le même / bool / les marques des composants communicants du NODE V et West le même / Bools de la même / Bool isConned (int v, int w) {// affirme v> = 0 && v <gv (); // affirmer w> = 0 && w <gv (); // return id [v] == id [w]; //} //}Le nombre de composants de passe est 3
Résumer
Ce qui précède est tout le contenu de cet article sur la mise en œuvre de la programmation Java d'exemples de code de parcours de traverse et de connectivité en profondeur. J'espère que ce sera utile à tout le monde. S'il y a des lacunes, veuillez laisser un message pour le signaler. Suivez Wulin.com et vous en gagnerez plus.