Einführung in ungerichtete Graphen benachbarter Tabellen
Eine ungerichtete Grafik einer Adjazenztabelle bezieht sich auf eine ungerichtete Grafik, die durch eine Adjazency -Tabelle dargestellt wird.
Die obige Abbildung G1 enthält 7 Eckpunkte von "A, B, C, D, E, F, G" und enthält 7 Kanten von "(a, c), (a, d), (a, f), (b, c), (c, d), (e, g), (f, g)".
Die Matrix rechts von der obigen Abbildung ist die Adjazenz von G1 im Speicher, die die Absicht anzeigt. Jeder Scheitelpunkt enthält eine verknüpfte Liste, in der die Sequenznummer der benachbarten Punkte des Scheitelpunkts aufgezeichnet wird. Beispielsweise sind die Daten der in der verknüpften Liste enthaltenen Knoten im zweiten Scheitelpunkt (Scheitelpunkt c) "0, 1, 3"; und diese "0, 1, 3" entsprechen den Sequenznummern von "A, B, D" und "A, B, D" alle benachbarten Punkte von C. So erfassen Sie die Informationen des Bildes.
Code Beschreibung des ungerichteten Diagramms der Adjazenztabelle
1. grundlegende Definition
öffentliche Klasse Listudg {// Der Scheitelpunkt, der die Tabelle adjaciert, die der verknüpften Liste private Klasse entspricht. Scheitelpunkt}; private vnode [] mvexs; // Vertex -Array ...}(01) Listudg ist die Struktur, die der Adjazenztabelle entspricht. MVEXS ist ein eindimensionales Array, das Scheitelpunktinformationen speichert.
(02) VNODE ist die Struktur, die den Eckpunkten der benachbarten Tabelle entspricht. Daten sind die Daten, die im Scheitelpunkt enthalten sind, und FirstEdge ist der Header -Zeiger der verlinkten Liste, die im Scheitelpunkt enthalten ist.
(03) ENODE ist die Struktur, die den Knoten entspricht, die an die verknüpfte Liste in den Scheitelpunkten der Tabelle liegen. Ivex ist der Index des Scheitelpunkts, der diesem Knoten in Vexs entspricht, während Nextedge auf den nächsten Knoten zeigt.
2. Erstellen Sie eine Matrix
Hier sind zwei Methoden, um eine Matrix zu erstellen. Einer verwendet bekannte Daten, und der andere verlangt vom Benutzer, die Daten manuell einzugeben.
2.1 Erstellen Sie ein Diagramm (mit der bereitgestellten Matrix)
/ * * Erstellen Sie einen Graph (unter Verwendung der bereitgestellten Matrix) * * Parameter Beschreibung: * VEXS - Vertex -Array * Kanten - Kantenarray */public ListUdg (char [] vexs, char [] Kanten) {// initialize "Vertex" und "Edge" intren = vexs.Length; Vnode [vlen]; für (int i = 0; i <mVexs.Length; i ++) {mvexs [i] = new vnode (); Ende des Scheitelpunkts des Randes char c1 = Kanten [i] [0]; char c2 = Kanten [i] [1]; // Lesen Sie den Startscheitel und Endscheitel des Randes in int p1 = GetPosition (Kanten [i] [0]); int p2 = Getposition (Kanten [i] [1]; // initialisieren nodieren nodieren nodieren nodieren nodieren node1enode1enode node 1node node1 = New ENode (). Link Node1 mit "das Ende der verknüpften Liste, wobei sich p1 befindet" if (mvexs [p1] .firstged == null) mvexs [p1] .firstedge = node1; sonst linkLast (mVexs [p1] .firstedge, node1); // initialisieren node2enode node2 = new enode (); node2.ivex = p1; // link node2 an "das Ende der verknüpften Liste, wobei P2" if "liegt" if (mVexs). sonst linkLast (mVexs [p2] .firstge, node2);}}Die Funktion besteht darin, eine ungerichtete Graphen einer Adjazenztabelle zu erstellen. Tatsächlich ist das von dieser Methode erstellte ungerichtete Diagramm Abbildung G1 oben. Der Anrufcode lautet wie folgt:
char[] vexs = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};char[][] edges = new char[][]{ {'A', 'C'}, {'A', 'D'}, {'A', 'F'}, {'B', 'C'}, {'C', 'D'}, {'E', 'g'}, {'f', 'g'}; listUdg pg; pg = new ListUdg (Vexs, Kanten);2.2 Erstellen Sie eine Grafik (Geben Sie sich selbst ein)
/ * * Erstellen Sie einen Diagramm (geben Sie die Daten selbst ein) */public listUdg () {// Eingeben Sie "Versionsnummer" und "Kantennummer" system.out.printf ("Eingabe von Vertex -Nummer:"); int vlen = readInt (); system.out.printf ("Eingaberandnummer:"); Inten = Readt (); 1))))) {System.out.printf ("Eingabefehler: Ungültige Parameter!/N"); zurück; Vnode (); mVexs [i] .data = readChar (); mVexs [i] .firstedge = null;} // initialisieren "rande" // mmatrix = new int [vlen] [vlen]; für (int i = 0; i <elden; i ++) {//). i); char c1 = readChar (); char c2 = readchar (); int p1 = getPosition (c1); int p2 = getPosition (c2); // node1enode node1 = new enode (); node1.ivex = p2; // Link -Node1 to "Die Verbindung der Verbindung, wobei p1 -nuls (mVex) (mVex) (mVex) (mVEXs) (p1]. mVexs [p1] .firstge = node1; sonst linkLast (mVexs [p1] .firstedge, node1); // initialisieren node2enode node2 = new enode (); node2.ivex = p1; // link node2 an "das Ende der verknüpften Liste, wobei P2" if "liegt" if (mVexs). sonst linkLast (mVexs [p2] .firstge, node2);}}Diese Funktion liest die Eingabe des Benutzers und konvertiert die Eingabedaten in das entsprechende, nicht gerichtete Graphen.
Der vollständige Quellcode des ungerichteten Graphen der Adjazenztabelle
importieren java.io.ioxception; import Java.util.scanner; öffentliche Klasse Listudg {// den Scheitelpunkt, der an die verlinkte Liste der Tabelle in der Tabelle private Klasse Enode {int itex; // der Position des Scheitelpunkts entspricht. Vnode {char data; // Vertex -Information Enode firstEdge; // Zeiger auf den ersten Bogen, der dem Scheitelpunkt angehängt ist}; private vnode [] mVexs; // Vertex -Array/ * * Erstellen Sie ein Graph (Eingabedaten von selbst ein. ReadInt (); System.out.printf ("Eingabekantennummer:"); int Elen = readInt (); if (vlen <1 || Elen <1 || (Elen> (vlen*(vlen - 1)))) {System.out.Out.printf ("Eingabefehler: Ungültige Parameter!/n"; (int i = 0; i <mVexs.length; i ++) {System.out.printf ("Vertex (%d):", i); mVexs [i] = new vnode (); int [vlen] [vlen]; für (int i = 0; i <eben; i ++) {// den Start- und Endscheitel des Randsystems lesen. = new enode (); node1.ivex = p2; // link node1 mit "das Ende der verknüpften Liste, wobei p1 sich befindet" if (mvexs [p1] .Firstedge == null) mVexs [p1] .firstedge = node1; sonst linkLast (mVexs [p1] .firstedge, node1); // initialisieren node2enode node2 = new enode (); node2.ivex = p1; // link node2 an "das Ende der verknüpften Liste, wobei P2" if "liegt" if (mVexs). else linkLast(mVexs[p2].firstEdge, node2);}}/* * Create a graph (using the provided matrix) * * Parameter description: * vexs -- Vertex array* edges -- Edge array*/public ListUDG(char[] vexs, char[][] edges) {// Initialize "vertex number" and "edge number" int vlen = vexs.length;int elen = Kanten.Length; // initialisieren "Vertex" mVexs = new vnode [vlen]; für (int i = 0; i <mVexs.Length; i ++) {mvexs [i] = new vnode (); mVexs [i] .data = vexs [i]; 0; node1 = new enode (); node1.ivex = p2; // linke node1 mit "das Ende der verknüpften Liste, wobei p1 sich befindet" if (mvexs [p1] .firstged == null) mvexs [p1] .firstedge = node1; sonst linkLast (mVexs [p1] .firstedge, node1); // initialisieren node2enode node2 = new enode (); node2.ivex = p1; // link node2 an "das Ende der verknüpften Liste, wobei P2" if "liegt" if (mVexs). sonst linkLast (mVexs [p2] .firstedge, node2);}}/** Link den Knotenknoten an die letzte der Liste*/private void linkLast (enode list, enode node) {enode p = list; while (p.Nextedge! {für (int i = 0; i <mvexs.length; i ++) if (mvexs [i] .data == ch) return i; return -1;}/** Lesen Sie ein Eingangszeichen*/private char ReaDchar () {char ch = '0'; do {try {ch = (char). {e.printstacktrace ();}} while (! ((ch> = 'a' && ch <= 'z') || (ch> = 'a' && ch <= 'z')); return ch;}/** ein Eingabemarakter lesen*/private Int Read () {scanner scanner = new scanner (system.in); quex. Graph*/public void print () {System.out.printf ("List Graph:/n"); für (int i = 0; i <mvexs.Length; i ++) {System.out.printf ("%d (%c):", i, mvexs [i] .data); while (node! 'D', 'e', 'f', 'g'}; char [] [] setzt = new char [] [] {{{'a', 'c'}, {'a', 'd'}, {'a', 'f'}, {'b', 'C'}, {{c '', ','}, ',', ',', ' 'G'}}; listudg pg; // benutzerdefinierte "graph" (Eingabematrixwarteschlange) // pg = new ListUdg (); // Verwenden Sie das vorhandene "Graph" pg = new ListUdg (Vexs, Kanten); pg.print (); // drucken Sie das Diagramm}}}Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels über die Implementierung des vollständigen Quellcodes der Java -Sprache der Adjazenztabelle undirected Graph. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf diese Seite verweisen:
Detaillierte Erläuterung des Mathematischen Ausdruckscodes der Java -Berechnung
Detaillierte Erläuterung des Parametercodes der variablen Länge in Java
Java -Sprachlösung zur perfekten Nummerncodeanalyse
Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!