عمق أولوية اجتياز
يشبه عبور أولوية العمق المشي متاهة من قبل شخص واحد:
كما هو موضح في الشكل ، حدد حافة من نقطة البداية للمشي إلى القمة التالية. قبل الوصول إلى قمة الرأس ، تم وضع علامة على أن هذه القمة قد وصلت.
عندما تأتي قمة ملحوظة ، تعود إلى قمة الرأس السابقة ، ثم حدد قمة لم يتم الوصول إليها.
استمر في التراجع عندما لا يكون هناك مرور إلى التقاطع الذي تراجعت إليه.
بالنسبة للمكون المتصل ، انظر إلى المفهوم: يطلق على الرسم البياني الفرعي المتصل للغاية للرسم البياني غير الموجه المكون المتصاعد لـ G. يوجد مكون واحد متصل فقط من أي رسم بياني متصل ، وهو نفسه ، والرسم البياني غير المتواصل غير المتواصل يحتوي على مكونات متعددة متصلة.
لنلقي نظرة على الأمثلة المحددة:
package com.datubstructure.graph ؛ // ابحث عن مكون UNICOM من مكونات الفئة العامة غير المصرح بها {رسم بياني خاص ؛ // صفيف لتخزين المدخلات المنطقية الخاصة []// قم بتخزين الحالة الخاصة بالمكونات الخاصة بالتكوين // المكونات (الرسم البياني الرسم البياني) {this.graph = graph ؛ componentCount = 0 ؛ // العدد الأولي للمكونات المتصلة هو 0 زيارة = new boolean [graph.v ()] ؛ mark = new int [graph.v ()] يتم تمييز مكون العقدة على أنه -1} لـ (int i = 0 ؛ i <graph.v () ؛ i ++) {// عبور أولوية DEPTH للعقدة غير المصورة إذا (! iSed [i]) {dfs (i) ؛ componentcount ++ ؛ {زيارة [i] = true ؛ // node i قد تم الوصول إلى علامة [i] = componentCount ؛ // node I تنتمي إلى العدد الحالي للمكونات المتصلة (علامات) لـ (int node: graph.adjacentnode (i)) isConnected (int v ، int w) {return mark [v] == mark [w] ؛ // الحكم على ما إذا كانت العقدتين مرتبطتين على علامات المكونات المتصلة التي تنتمي إليها العقدان إلى} public getcomponentcount () {return componentCount ؛ // مرجع الرسم البياني // الخاص بزراعة منطقية [] زار ؛ // ما إذا كان يتم الوصول إلى العقدة أثناء عملية DFS // private int ccount ؛ // سجل عدد مكونات الصين Unicom // private int [] id ؛ . // يتم تعيين حالة الوصول للعقدة V على True // id [v] = ccount ؛ . dfs (i) ؛ //} //} /// // constructor للعثور على المكونات المتصلة بالرسوم البيانية غير المألوفة // المكونات العامة (الرسم البياني الرسم البياني) {/// // algorithm تهيئة // g = graph ؛ المكونات المتصلة التي تنتمي إليها العقدة في الرسم البياني لتخزين الصفيف g // id = new int [gv ()] ؛ //// // // تتم تهيئة عدد المكونات المتصلة إلى 0 // ccount = 0 ؛ /////////////////////// // تعيين جميع المطبوعات التي تمت زيارتها إلى خطأ ؛ قم بتعيين جميع صفائف المعرف إلى -1 // لـ (int i = 0 ؛ i <gv () ؛ i ++) {// زيارة [i] = false ؛ // id [i] = -1 ؛ //} /////find unix component of the graph // for (int i = 0 ؛ i <gv () ؛ i ++ // // عمق أولوية عبور // dfs (i) ؛ // ccount ++ ؛ //} //} /// إرجاع عدد مكونات UNICOM من الرسم البياني // int count () isConnected (int v ، int w) {// assert v> = 0 && v <gv () ؛ // assert w> = 0 && w <gv () ؛ // return id [v] == id [w] ؛ //} //}عدد مكونات المرور هو 3
لخص
ما ورد أعلاه هو كل محتوى هذه المقالة حول تنفيذ برمجة Java لأمثلة من رمز مكونات مكونات الاتصالات العميقة والاتصال. آمل أن يكون ذلك مفيدًا للجميع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. اتبع wulin.com وسوف تكسب المزيد.