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"]