تصف هذه المقالة مشكلة تغطية الشطرنج التي تنفذها Java استنادًا إلى خوارزمية التقسيم والقهر. شاركه للرجوع إليه ، على النحو التالي:
في لوحة الشطرنج تتكون من 2^k * 2^k المربعات ، هناك مربع يختلف عن الآخرين. إذا تم استخدام الدومينو الأربعة التالية على شكل حرف L لتغطية المربعات الأخرى باستثناء هذا المربع الخاص ، كيفية تغطيتها. ويرد أدناه الدومينو الأربعة على شكل حرف L:
يتم عرض المربعات الخاصة في الشطرنج في الشكل:
المبدأ الأساسي للتنفيذ هو تقسيم 2^k * 2^k chessboard إلى أربعة 2^(k - 1) * 2^(k - 1) لوح الفرع. يجب أن يكون المربع الخاص في أحد الألواح الفرعية. إذا كان المربع الخاص في لوحة فرعية معينة ، فاستمر في معالجة اللوح الفرعي بشكل متكرر حتى يكون هناك مربع واحد فقط في هذه اللوح الفرعي. إذا لم يكن المربع الخاص في لوحة فرعية معينة ، فقم بتعيين الموضع المقابل في اللوح الفرعي كرقم دومينو ، وقم بتحويل اللوحة دون مربعات خاصة إلى لوح فرعي مع مربعات خاصة ، ثم معالجة اللوحة الفرعية بشكل متكرر. يظهر المبدأ أعلاه في الشكل:
الرمز المحدد كما يلي:
تشير الحزمة العرضية ؛ تشير الشطرنج العام { /*tr إلى رقم الصف في الزاوية اليسرى العليا من الشطرنج ، وعدد العمود في الزاوية اليسرى العليا من الشطرنج ، وعدد الصف في لوحة الشطرنج الخاصة ، التي تشير إلى الرقم العمود للوحدة الخاصة بالشطرنج* / public static chessboard (int tc tc ، int dc ، int dc) } int t = title ++ ؛ int s = size/2 ؛ // قم بتغطية الزاوية اليسرى العلوية من لوحة الشطرنج إذا (DR <TR + S && dc <tc + s) {// مربع خاص في لوحة الشطرنج هذه (TR ، TC ، DR ، DC ، S) ؛ } آخر {// لا يوجد مربع خاص في هذه اللوحة ، قم بتغطية الزاوية اليمنى السفلية مع الدومينو على شكل حرف T [tr + s -1] [tr + s -1] = t ؛ // تغطية بقية الشطرنج المربع (TR ، TC ، TC + S - 1 ، TC + S - 1 ، S) ؛ }. } آخر {// يحتوي هذا اللوحة على مربع خاص عند الظهر ، قم بتغطية الزاوية اليسرى السفلية مع دومينوز على شكل حرف T [tr + s-1] [tc + s] = t ؛ // قم بتغطية بقية الشطرنج المربع (TR ، TC + S ، TR + S - 1 ، TC + S ، S) ؛ } // قم بتغطية لوحة الشطرنج السفلى الأيسر إذا (dr> = tr + s && dc <tc + s) {// square square in chessboard (tr + s ، tc ، dr ، dc ، s) ؛ } آخر {// لا يوجد مربع خاص في هذه اللوحة ، قم بتغطية لوحة الزاوية اليمنى العليا [tr + s] [tr + s -1] = t ؛ // تغطية الشطرنج المربعات الأخرى (TR ، TC ، TC + S ، TC + S - 1 ، S) ؛ } // قم بتغطية الشطرنج الأيمن السفلي (tr> = tr + s && dc> = tc + s) {// مربع خاص في لوحة الشطرنج هذه (tr + s ، tc + s ، dr ، dc ، s) ؛ } آخر {// لا يوجد مربع خاص في هذه اللوحة ، استخدم الدومينو على شكل حرف T لتغطية لوحة الزاوية اليسرى العليا [tr + s] [tc + s] = t ؛ // قم بتغطية لوحة المربعات المتبقية (tr + s ، tc + s ، tc + s ، tc + s ، s) ؛ }} suppressWarnings ("static-access") public static void main (String args []) {system.out.println ("Wulin.com test Results:") ؛ المجلس [2] [2] = 0 ؛ الشطرنج ch = شطرنج جديد () ؛ Ch.Chessboard (0 ، 0 ، 2 ، 2 ، الحجم) ؛ لـ (int i = 0 ؛ i <size ؛ ++ i) {for (int j = 0 ؛ j <size ؛ j ++) {system.out.print (board [i] [j]+"") ؛ } system.out.println () ؛ }} static final int size = 4 ؛ static int title = 1 ؛ لوحة int ثابتة [] [] = New int [size] [size] ؛}نتائج التشغيل:
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص" Tips Java ".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.