Menu
CoddyTech

Rat in a Maze

متوسطالتراجعpython iconjava iconcpp iconc iconjs icon+10

يبدأ جرذ في الخلية العلوية اليسرى من n × n maze، حيث تمثل 1 خلية مفتوحة ويمثل 0 جدارًا، ويجب أن يصل إلى الخلية السفلية اليمنى. تنتقل كل حركة خلية واحدة إلى الأسفل (D) أو اليسار (L) أو اليمين (R) أو الأعلى (U) إلى خلية مفتوحة. لا يزور المسار الخلية نفسها مرتين وينتهي عند المخرج.

أعِد كل مسار كسلسلة من الحركات، بترتيب أبجدي، أو مصفوفة فارغة إن لم يوجد أي مسار.

الدالة

findPaths(maze: integer-2d-array) → string-array
mazeinteger-2d-array
الشبكة n × n، حيث يشير 1 إلى خلية مفتوحة و0 إلى جدار
تُرجعstring-array
كل مسار من أعلى اليسار إلى أسفل اليمين على هيئة سلسلة من الحركات، بترتيب أبجدي

القيود

  • 2 ≤ n ≤ 5
  • maze[i][j] تساوي 0 أو 1.
  • يحتوي كل متاهة اختبار على 2,000 مسار كحد أقصى. تحتوي متاهة مفتوحة بحجم 5 × 5 على 8,512 مسارًا، لذا فهي غير مشمولة في الاختبارات.

أمثلة

المدخلات
maze = [[1, 1, 0, 0], [0, 1, 1, 0], [1, 1, 1, 0], [1, 0, 1, 1]]
المخرجات
["RDDRDR", "RDRDDR"]
الشرح
في البداية، تكون الخلية الموجودة على اليمين فقط مفتوحة، ومن هناك تكون الخلية الموجودة أسفلها فقط مفتوحة، لذا يبدأ المساران بـ RD. يأتي RDDRDR أولًا في الترتيب لأن حركته الثالثة، D، تسبق R.
challenge icon

سؤال إضافي

مع السماح بالحركات الأربع كلها، هل يمكنك عدّ المسارات من دون سردها؟ ما أكبر قيمة يمكن أن يبلغها n قبل أن يصبح العدّ متعذّرًا؟

إعادة ضبط الشيفرة
def findPaths(maze):
    # اكتب الكود هنا

اختبار #1

اختبار #2

وسيط

maze = [[1, 1, 0, 0], [0, 1, 1, 0], [1, 1, 1, 0], [1, 0, 1, 1]]

الإخراج المتوقع

["RDDRDR", "RDRDDR"]