נתון מערך דו-ממדי ריבועי mat המכיל מספרים שלמים. נסמן את מספר השורות והעמודות במערך ב- n. המספרים ב- mat הם חיוביים ממש בלבד (ללא אפסים).
המסלולים בהם נעבור במערך מתחילים תמיד בתא הראשון (0,0) ועד לתא האחרון שהוא התא (mat.length−1,mat.length−1), כאשר אפשר לעבור מתא (i,j) לכל ארבעת שכניו מימין, משמאל, למעלה ולמטה, אבל לא באלכסון.
אנחנו מעוניינים למצוא את המסלול שהמספר המקסימלי בו הוא המינימלי מבין המספרים המקסימלים במסלולים האחרים האפשריים. במילים אחרות, אם נסתכל על כל המסלולים במערך לפי המתואר לעיל, ובכל מסלול נמצא את האיבר המקסימלי, נרצה להחזיר את האיבר המקסימלי הכי קטן מכולם.כתבו שיטה סטטית רקורסיבית המקבלת מערך דו-ממדי ריבועי mat המלא במספרים שלמים, חיוביים ממש בלבד, ומחזירה את ערכו של המספר המינימלי מבין המספרים המקסימלים בכל המסלולים האפשריים.דוגמאות:B =
0 1
1 3
4 2
A =
0 1
1 2
3 4
בכל אחד מהמערכים A ו- B יש שני מסלולים מהתא הראשון לאחרון:- המסלול הראשון עובר בתאים
[0][0] -> [0][1] -> [1][1] - המסלול השני עובר בתאים
[0][0] -> [1][0] -> [1][1]
במערך A המספר המקסימלי במסלול הראשון הוא 4, והמספר המקסימלי במסלול השני הוא 4. לכן יוחזר 4.
במערך B המספר המקסימלי במסלול הראשון הוא 3, והמספר המקסימלי במסלול השני הוא 4. לכן יוחזר 3.D =
4 5 8 2
3 12 16 7
13 1 10 14
15 11 9 6
C =
4 5 8 2
3 12 7 16
13 1 10 14
15 11 9 6
אז במערך C המספר שיוחזר יהיה 10, שהוא המקסימום במסלול המסומן, והוא המינימלי מבין כל ערכי המקסימום של כל המסלולים האחרים.
אבל אם נחליף את התאים [1][3] שבו יש 16 ואת [1][2] שבו יש 7 (זה המערך D), המספר שיוחזר יהיה 12, שהוא המקסימום במסלול המסומן. שימו לב ש- 12 הוא המקסימום גם במסלול הזה: [0][0] -> [0][1] -> [1][1] -> [1][2] -> [2][2] -> [2][3] -> [3][3]D =
4 1 9 3 25
24 23 2 21 5
13 12 15 16 22
17 11 18 19 20
10 14 8 7 6
C =
4 1 9 3 25
24 23 22 21 5
13 12 15 16 14
17 11 18 19 20
10 2 8 7 6
אז במערך C המספר שיוחזר יהיה 21, שהוא המקסימום במסלול המסומן, והוא המינימלי מבין כל ערכי המקסימום של כל המסלולים האחרים. שימו לב ש- 21 הוא המקסימום בעוד כמה מסלולים. לדוגמא:
1. [0][0] -> [0][1] -> [0][2] -> [0][3] -> [1][3] -> [3][2] -> [3][3] -> [3][4] -> [4][4]
2. [0][0] -> [0][1] -> [0][2] -> [0][3] -> [1][3] -> [3][2] -> [2][2] -> [2][3] -> [2][4] -> [3][4] -> [4][4]
אבל אם נחליף את התאים 14,22,2 במערך (זה המערך D), המספר שיוחזר יהיה 15, שהוא המקסימום במסלול המסומן.חתימת השיטה היא:השיטה צריכה להיות רקורסיבית ללא שימוש בלולאות כלל. כך גם כל שיטות העזר שתכתבו (אם תכתבו) לא יכולות להכיל לולאות.- מותר לשנות את המטריצה במהלך השיטה, אבל המטריצה צריכה לחזור לקדמותה לאחר ביצוע השיטה.
- המטריצה בהכרח ריבועית. כלומר, מספר השורות שווה למספר העמודות.
- מותר להשתמש בשיטות
Math.max ו- Math.min מהמחלקה Math וכן בקבועים Integer.MAX_VALUE, Integer.MIn_VALUE מהמחלקה Integer. - מותר להשתמש בהעמסת-יתר (Overloading).
- אין צורך לדאוג ליעילות השיטה! אבל כמובן שצריך לשים לב לא לעשות קריאות רקורסיביות מיותרות!
- אל תשכחו לתעד את מה שכתבתם!