- הגשות
- פתרונות
- פתרון רשמי
- תיאור
כדי לפתור את הבעיה, כדאי לחשוב על הגישה הבאה:
-
רקורסיה במקום לולאות – אסור להשתמש בלולאות בכלל. תשתמשו בשיטה רקורסיבית שתעבור לכל הכיוונים האפשריים (למעלה, למטה, ימין, שמאל) מתוך התא הנוכחי.
-
שמירה על הערך המקסימלי במסלול – בשיטה הרקורסיבית, תעבירו כפרמטר את הערך הכי גדול שראיתם במסלול עד כה.
-
עצירת בסיס – כאשר אתם מגיעים לתא הסופי
(n-1,n-1)
, זה אומר שהשלמתם מסלול. תחזירו את הערך המקסימלי במסלול הזה. -
ביקור חד־פעמי בכל מסלול – כדי לא להיכנס ללולאה אינסופית (למשל לחזור שוב לתא שכבר ביקרנו בו), סמנו את התאים שכבר ביקרתם בהם (למשל על־ידי שינוי זמני של ערכם), והחזירו אותם למצבם הקודם בסיום הקריאה.
-
מציאת התוצאה הכללית – כל קריאה רקורסיבית מחזירה את הערך המקסימלי של מסלול. שמרו את הקטן ביותר מבין הערכים האלו – זה מה שצריך להחזיר בסופו של דבר.
-
שימוש בקבועים מתאימים – אפשר להיעזר בקבועים
Integer.MAX_VALUE
ו־Integer.MIN_VALUE
כדי להשוות ערכים.
🧠 טיפ: אם תנסו לבדוק ידנית את המסלולים האפשריים בדוגמאות בשאלה, תבינו טוב יותר איך הרעיון של “מינימום המקסימומים” עובד.