مقدمة للرسوم البيانية غير الموجهة للجداول المجاورة
يشير رسم بياني غير موجه لجدول مجاور إلى رسم بياني غير موجه يمثله جدول مجاور.
يحتوي الشكل أعلاه G1 على 7 رؤوس "A ، B ، C ، D ، E ، F ، G" ، ويحتوي على 7 حواف "(A ، C) ، (A ، D) ، (A ، F) ، (B ، C) ، (C ، D) ، (E ، G) ، (F ، G)".
المصفوفة على يمين الشكل أعلاه هي مجاورة G1 في الذاكرة التي تشير إلى القصد. يحتوي كل قمة على قائمة مرتبطة تسجل "رقم تسلسل النقاط المجاورة للنقطة". على سبيل المثال ، فإن بيانات العقد الواردة في القائمة المرتبطة الواردة في قمة الرأس الثانية (قمة الرأس C) هي على التوالي "0 ، 1 ، 3" ؛ وتتوافق هذه "0 ، 1 ، 3" مع أرقام التسلسل من "A ، B ، D" ، و "A ، B ، D" كلها نقاط مجاورة لـ C. هذه هي كيفية تسجيل معلومات الصورة.
رمز وصف الرسم البياني غير الموجود لجدول المجاور
1. التعريف الأساسي
public class ListUDG {// The vertex that adjaces the table corresponding to the linked list private class ENode {int ivex;// The position of the vertex that the edge points to ENode nextEdge;// Pointer to the next arc}// The vertex that adjaces the table in the table private class VNode {char data;// Vertex information ENode firstEdge;// Pointer to the first arc that attaches to the Vertex} ؛ private vnode [] mvexs ؛ // Vertex Array ...}(01) Listudg هو الهيكل المقابل لجدول المجاور. MVEXS هو صفيف أحادي البعد الذي يخزن معلومات قمة الرأس.
(02) vnode هو الهيكل المقابل لقرارات الجدول المجاور. البيانات هي البيانات الواردة في Vertex ، و Firstedge هي مؤشر الرأس للقائمة المرتبطة الواردة في قمة الرأس.
(03) enode هو الهيكل المقابل للعقد المجاورة للقائمة المرتبطة الواردة في رؤوس الجدول. Ivex هو فهرس قمة الرأس المقابلة لهذه العقدة في VEXS ، بينما يشير Nextedge إلى العقدة التالية.
2. إنشاء مصفوفة
فيما يلي طريقتان لإنشاء مصفوفة. يستخدم المرء البيانات المعروفة ، والآخر يتطلب من المستخدم إدخال البيانات يدويًا.
2.1 قم بإنشاء رسم بياني (باستخدام المصفوفة المقدمة)
/ * * إنشاء رسم بياني (باستخدام المصفوفة المتوفرة) * * الوصف المعلمة: * Vexs - vertex صفيف * الحواف - edge array */public listudg (char [] vexs ، char [] [] الحواف) {// initialize "vertex" و "edge" int vlen ؛ vnode [vlen] ؛ for (int i = 0 ؛ i <mvexs.length ؛ i ++) {mvexs [i] = new vnode () ؛ mvexs [i] .data = vexs [i] ؛ إنهاء قمة الرأس من الحافة char c1 = الحواف [i] [0] ؛ char c2 = الحواف [i] [1] ؛ // اقرأ قمة البدء و ending vertex للحافة int p1 = getPosition (الحواف [i] [0]) Link Node1 إلى "نهاية القائمة المرتبطة حيث يوجد p1" إذا (mVexs [p1] .firstegge == null) mvexs [p1] .firstegge = node1 ؛ Else Linklast (mVexs [p1] .firstedge ، node1) ؛ // تهيئة node2enode node2 = new enode () ؛ node2.ivex = p1 ؛ // link node2 إلى "نهاية القائمة المرتبطة حيث يوجد p2" if (mvexs [p2]. Linklast آخر (mvexs [p2] .firstedge ، node2) ؛}}الوظيفة هي إنشاء رسم بياني غير موجه لجدول مجاور. في الواقع ، فإن الرسم البياني غير الموجود الذي أنشأته هذه الطريقة هو الشكل G1 أعلاه. رمز الاتصال كما يلي:
char [] vexs = {'a' ، 'b' ، 'c' ، 'd' ، 'e' ، 'f' ، 'g'} ؛ char [] [] الحواف = new char [] {{'a' ، 'c'} ، {'a' ، 'd' {'e' ، 'g'} ، {'f' ، 'g'}} ؛ listudg pg ؛ pg = new listudg (vexs ، reges) ؛2.2 إنشاء رسم بياني (أدخل نفسك)
/ * * قم بإنشاء رسم بياني (أدخل البيانات بنفسك) */public listudg () {// أدخل "رقم الإصدار" و "edge number" system.out.printf ("رقم الإدخال: 1)))))) {system.out.printf ("خطأ في الإدخال: معلمات غير صالحة!/n") ؛ return ؛} // تهيئة "الإصدار" mvexs = new vnode [vlen] ؛ for (int i = 0 ؛ i <mvexs.length ؛ i ++) {system.Out.printf ( vnode () ؛ mvexs [i] .data = readchar () ؛ mvexs [i] .firstegge = null ؛} // تهيئة "Edge" // mmatrix = new int [vlen] [vlen] ؛ for (int i = 0 ؛ i) ؛ char c1 = readchar () ؛ char c2 = readchar () ؛ int p1 = getPosition (c1) ؛ int p2 = getPosition (c2) ؛ // تهيئة node1enode node1 = new enode () ؛ node1.ivex = p2 ؛ mvexs [p1] .firstegge = node1 ؛ Else Linklast (mVexs [p1] .firstedge ، node1) ؛ // تهيئة node2enode node2 = new enode () ؛ node2.ivex = p1 ؛ // link node2 إلى "نهاية القائمة المرتبطة حيث يوجد p2" if (mvexs [p2]. Linklast آخر (mvexs [p2] .firstedge ، node2) ؛}}تقرأ هذه الوظيفة إدخال المستخدم وتحول بيانات الإدخال إلى الرسم البياني غير الموجه المقابل.
رمز المصدر الكامل للرسم البياني غير الموجه لجدول المجاور
استيراد java.io.ioException ؛ استيراد java.util.scanner ؛ الفئة العامة listudg {// قمة الرأس المجاورة للقائمة المرتبطة المقابلة للجدول في الجدول الخاص enode enode {int vex ؛ Vnode {char data ؛ // vertex معلومات enode firstedge ؛ // مؤشر إلى القوس الأول المرفق بـ Vertex} ؛ private vnode [] mvexs ؛ // vertex array/ * * * إنشاء رسم بياني (input data by) readInt () ؛ system.out.printf ("رقم حافة الإدخال:") ؛ int elen = readInt () ؛ if (vlen <1 || elen <1 || (elen> (vlen*(vlen - 1)))))) vnode [vlen] ؛ for (int i = 0 ؛ i <mvexs.length ؛ i ++) {system.out.printf ("vertex (٪ d):" ، i) ؛ mvexs [i] = new vnode () ؛ int [vlen] [vlen] ؛ for (int i = 0 ؛ i <elen ؛ i ++) {// اقرأ vertex وانتهاءها لنظام الحافة. = new enode () ؛ node1.ivex = p2 ؛ // link node1 إلى "نهاية القائمة المرتبطة حيث يوجد p1" if (mvexs [p1] .firstegge == null) mvexs [p1] .firstegge = node1 ؛ Else Linklast (mVexs [p1] .firstedge ، node1) ؛ // تهيئة node2enode node2 = new enode () ؛ node2.ivex = p1 ؛ // link node2 إلى "نهاية القائمة المرتبطة حيث يوجد p2" if (mvexs [p2]. آخر linklast (mvexs [p2] .firstedded ، node2) ؛}}/ * * إنشاء رسم بياني (باستخدام المصفوفة المتوفرة) * * الوصف المعلمة: * vexs - vertex array * edges - edge array */public listudg (char [] vexs ، char [] = adges.length ؛ // تهيئة "vertex" mvexs = new vnode [vlen] ؛ for (int i = 0 ؛ i <mvexs.length ؛ i ++) {mvexs [i] = new vnode () ؛ mvexs [i] .data = vexs [i] ؛ mvexs [i] 0 ؛ node1 = new enode () ؛ node1.ivex = p2 ؛ // link node1 إلى "نهاية القائمة المرتبطة حيث يوجد p1" if (mvexs [p1] .firstegge == null) mvexs [p1] .firstedge = node1 ؛ Else Linklast (mVexs [p1] .firstedge ، node1) ؛ // تهيئة node2enode node2 = new enode () ؛ node2.ivex = p1 ؛ // link node2 إلى "نهاية القائمة المرتبطة حيث يوجد p2" if (mvexs [p2]. Else Linklast (mvexs [p2] .firstedge ، node2) ؛}}/** اربط عقدة العقدة إلى آخر القائمة*/private void linklast (قائمة enode ، enode) {enode p = list ؛ {for (int i = 0 ؛ i <mvexs.length ؛ i ++) if (mvexs [i] .data == ch) return i ؛ return -1 ؛}/** اقرأ حرفًا إدخال*/خاص readchar () {char ch = '0' {E.PrintStackTrace () ؛}} بينما (! (((CH> = 'A' && ch <= 'z') || (ch> = 'a' && cH <= 'z')) ؛ return ch ؛}/*** اقرأ حرفًا إدخال*/خاص readint () {scanner scanner = new system.in) 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] بينما (node! = null) {system.out.printf ("٪ d (٪ c)" ، node.ivex ، mvexs [node.ivex] .data) ؛ node = node.nextedge ؛} system.out.printf ("/n") ؛ 'd' ، 'e' ، 'f' ، 'g'} ؛ char [] [] الحواف = new char [] [] {{'a' ، 'c'} ، {'a' ، 'd'} ، {'a' ، f '} ، {' b '،' c '} ، {' c '،' d '} ، {'} ، {g '} 'g'}} ؛ listudg pg ؛ // مخصص "الرسم البياني" (قائمة انتظار مصفوفة الإدخال) // pg = new listudg () ؛ // استخدم "الرسم البياني" الحالي "pg = new listudg (VEXS ، الحواف) ؛ pg.print () ؛ // print diag}}}لخص
ما سبق هو كل محتوى هذه المقالة حول تنفيذ الكود المصدر الكامل للغة Java في الجدول المجاور الرسم البياني غير الموجود. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى هذا الموقع:
شرح مفصل لقضاء رمز التعبير الرياضي حساب Java
شرح مفصل لرمز معلمة الطول المتغير في جافا
حل لغة جافا لتحليل رمز الرقم المثالي
إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!