Introduction aux graphiques non dirigés des tables adjacentes
Un graphique non dirigé d'une table d'adjacence fait référence à un graphique non dirigé représenté par une table d'adjacence.
La figure G1 ci-dessus contient 7 sommets de "A, B, C, D, E, F, G", et contient 7 bords de "(a, c), (a, d), (a, f), (b, c), (c, d), (e, g), (f, g)".
La matrice à droite de la figure ci-dessus est l'adjacence de G1 en mémoire indiquant l'intention. Chaque sommet contient une liste liée qui enregistre le "numéro de séquence des points adjacents du sommet". Par exemple, les données des nœuds contenus dans la liste liée contenue dans le deuxième sommet (sommet C) sont respectivement "0, 1, 3"; et ces "0, 1, 3" correspondent aux numéros de séquence de "A, B, D" et "A, B, D" sont tous des points adjacents de C. C'est comment enregistrer les informations de l'image.
DESCRIPTION DE CODE DU GRAPH NON DIFÉRÉ DE TABLEAU ADANCENCE
1. Définition de base
classe publique listUDg {// Le sommet qui ajace le tableau correspondant à la classe privée liée enode {int ivex; // la position du sommet que le bord pointe vers Enode Nextege; // pointeur vers l'arc suivant} // le sommet qui ajuste le tableau dans le tableau privé VNode {chargé des informations sur les informations sur les informations sur les informations d'achat; vertex}; private vnode [] mvexs; // array vertex ...}(01) ListUDG est la structure correspondant à la table d'adjacence. MVEXS est un tableau unidimensionnel qui stocke les informations de sommet.
(02) Vnode est la structure correspondant aux sommets de la table adjacente. Les données sont les données contenues dans le sommet, et FirstEdge est le pointeur d'en-tête de la liste liée contenue dans le sommet.
(03) Enode est la structure correspondant aux nœuds qui sont adjacents à la liste liée contenue dans les sommets de la table. Ivex est l'indice du sommet correspondant à ce nœud dans VEXS, tandis que Nextege pointe vers le nœud suivant.
2. Créez une matrice
Voici deux méthodes pour créer une matrice. L'un utilise des données connues et l'autre oblige l'utilisateur à saisir les données manuellement.
2.1 Créez un graphique (en utilisant la matrice fournie)
/ * * Créer un graphique (en utilisant la matrice fournie) * * Paramètre Description: * VEXS - Vertex Array * bords - bord de bord * / public listudg (char [] vexs, char [] [] bords) {// initialiser "vertex" et "edge" int vlen = vexs.length; int elen = edges.Length; // initialize "Vexs" mVexs = new Vnode [vlen]; for (int i = 0; i <mvexs.length; i ++) {mvexs [i] = new vnode (); mVEXS [i] .data = vexs [i]; mvexs [i] .firstEdge = null;} // inimialiser "les bords" pour (int i = 0; Vertex de fin du bord char c1 = bords [i] [0]; char c2 = bords [i] [1]; // lire le sommet de départ et la fin du sommet du bord int p1 = getose (bord Link Node1 à "La fin de la liste liée où P1 est située" if (mVexs [P1] .FirstEdge == NULL) MVEXS [P1] .FirstEdge = Node1; else linkLast (mVexs [p1] .firstEdge, node1); // initialize node2enode node2 = new Enode (); node2.ivex = p1; // lien node2 à "la fin de la liste liée où p2 est localisé" if (mvexs [p2] .firsedge == null) MVEXS [P2] .figStEdge = Node2; else linkLast (mVexs [p2] .firstEdge, node2);}}La fonction consiste à créer un graphique non dirigé d'une table d'adjacence. En fait, le graphique non dirigé créé par cette méthode est la figure G1 ci-dessus. Le code d'appel est le suivant:
char [] vexs = {'a', 'b', 'c', 'd', 'e', 'f', 'g'}; char [] [] edges = new char [] [] {{'a', 'c'}, {'a', 'd'}, {'a', 'f'}, {'b', 'c'}, ',', '}, {' b ',' C '},', ', à'}, {'b', 'C'}, ',', à '}. {'E', 'g'}, {'f', 'g'}}; listUDg pg; pg = new listUDg (vexs, bords);2.2 Créez un graphique (entrez-vous)
/ * * Créer un graphique (entrez les données vous-même) * / public listUDg () {// Entrez "numéro de version" et "numéro de bord" System.out.printf ("Numéro de sommet d'entrée:"); int vlen = readInt (); System.out.printf ("Entrée Edge Number:"); 1)))))) {System.out.printf ("Erreur d'entrée: paramètres non valides! / N"); return;} // initialiser "version" mvexs = new vnode [vlen]; pour (int i = 0; i <mvexs.length; i ++) {system.out.printf ("vertex (% d):", i); mVexs [i] = new); Vnode (); mvexs [i] .data = readchar (); mvexs [i] .firstEdge = null;} // initialiser "edge" // mMatrix = new int [vlen] [vlen]; for (int i = 0; i <elen; i ++) {// lire le verte de démarrage et de fin, de l'Edge System. i); char c1 = readchar (); char c2 = readchar (); int p1 = getPosition (c1); int p2 = getPosition (c2); // initialize node1enode node1 = new Enode (); node1.ivex = p2; // lier node1 à "l'extrémité de la liste liée où p1 est situé" if (mVexs [P1]. MVEXS [P1] .FirstEdge = Node1; else linkLast (mVexs [p1] .firstEdge, node1); // initialize node2enode node2 = new Enode (); node2.ivex = p1; // lien node2 à "la fin de la liste liée où p2 est localisé" if (mvexs [p2] .firsedge == null) MVEXS [P2] .figStEdge = Node2; else linkLast (mVexs [p2] .firstEdge, node2);}}Cette fonction lit l'entrée de l'utilisateur et convertit les données d'entrée en graphique non dirigé correspondant.
Le code source complet du graphique non dirigé de la table d'adjacence
Importer java.io.ioException; Importer java.util.scanner; classe publique listUDg {// le sommet qui est adjacent à la liste liée correspondant au tableau dans la classe privée enode {int ivex; // la position du sommet Vnode {char data; // Vertex Information Enode firstEdge; // pointeur vers le premier arc qui est attaché au vertex}; privé vnode [] mVexs; // Vertex Array / * * Créer un graphique (entrée Data par vous-même) * / public listudg () {// Entrer "Nombre de vertex") readInt (); System.out.printf ("Numéro de bord d'entrée:"); int elen = readInt (); if (vlen <1 || elen <1 || (elen> (vlen * (vlen - 1))))) {System.out.printf ("Erreur d'entrée: paramètres invalid! / N"); Retour;} // initial "Vertex" MVEX = neuf = neuf = neuf = neuf = neuf = neuf = neuf mvex = nouveau = neuf " Vnode [vlen]; for (int i = 0; i <mvexs.length; i ++) {System.out.printf ("vertex (% d):", i); mVexs [i] = new Vnode (); mvexs [i] .data = readcharing (); mvexs [i]. int [vlen] [vlen]; pour (int i = 0; i <elen; i ++) {// lire le sommet de démarrage et de fin du système de bord.out.printf ("edge (% d):", i); char c1 = readchar (); char c2 = readchar (); int p1 = getPosition (c1); int p2 = getPosition (c2); = new Enode (); node1.ivex = p2; // lier le node1 à "la fin de la liste liée où p1 est situé" if (mVexs [p1] .firstEdge == null) mVexs [p1] .firstEdge = node1; else linkLast (mVexs [p1] .firstEdge, node1); // initialize node2enode node2 = new Enode (); node2.ivex = p1; // lien node2 à "la fin de la liste liée où p2 est localisé" if (mvexs [p2] .firsedge == null) MVEXS [P2] .figStEdge = Node2; else linklast (mVexs [p2] .FirstEdge, node2);}} / * * Créer un graphique (en utilisant la matrice fournie) * * Paramètre Description: * Vexs - Vertex Array * bord = edges.length; // initialiser "vertex" mvexs = new vnode [vlen]; for (int i = 0; i <mvexs.length; i ++) {mvexs [i] = new vnode (); mvexs [i] .data = vexs [i]; mVexs [i] .firSedge = null;} 0; node1 = new Enode (); node1.ivex = p2; // lier node1 à "la fin de la liste liée où p1 est situé" if (mVexs [p1] .firstEdge == null) mVexs [p1] .firstEdge = node1; else linkLast (mVexs [p1] .firstEdge, node1); // initialize node2enode node2 = new Enode (); node2.ivex = p1; // lien node2 à "la fin de la liste liée où p2 est localisé" if (mvexs [p2] .firsedge == null) MVEXS [P2] .figStEdge = Node2; else linkLast (mvexs [p2] .firstEdge, node2);}} / * * lier le nœud de nœud au dernier de la liste * / private void linklast (eNode list, eNode node) {enode p = list; while (p.nextedge! = null) p = p.p.nextege; p.Nextege = node;} / * * * Retour la position * / private INTPOSE (charbon CH) {for (int i = 0; i <mvexs.length; i ++) if (mVexs [i] .data == ch) return i; return -1;} / * * lire un caractère d'entrée * / char) readchar () {char ch = '0'; do {try {ch = (char) system.in.read ();} catch (ioexception e) gens void print () {System.out.printf ("list graph: / n"); for (int i = 0; i <mvexs.length; i ++) {System.out.printf ("% d (% c):", i, mvexs [i] .data); enode node = mVexs [i] .firsedge; while (node! = null) {System.out.printf ("% d (% c)", node.ivex, mvexs [node.ivex] .data); node = node.nextedge;} system.out.printf ("/ n");}} public static void main (string [] args) {char [] vexs = {', b', 'c'. 'D', 'e', 'f', 'g'}; char [] [] edges = new Char [] [] {{'a', 'c'}, {'a', 'd'}, {'a', 'f'}, {'b', 'c'}, {'c', '}, {' e ',' g '}, {', f ','}, {'e', 'g'}, {f. 'G'}}; listUDg pg; // personnalisé "graphique" (file d'attente de matrice d'entrée) // pg = new listUDg (); // Utilisez le "graphique" existant "pg = new listUDg (Vexs, Edges); pg.print (); // Diagramme d'impression}}Résumer
Ce qui précède est tout le contenu de cet article sur la mise en œuvre du code source complet de la langue Java du graphique non dirigé de la table d'adjacence. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à ce site:
Explication détaillée du code d'expression mathématique de calcul Java
Explication détaillée du code du paramètre de longueur variable en Java
Solution de langue java à une analyse de code numérique parfaite
S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!