מסלול פרש עם סכום מקסימלי במערך דו-ממדי

נתון מערך דו-ממדי mat, בגודל n×m (n שורות ו-m עמודות) שערכיו הם מספרים שלמים וחיוביים ממש.

  • נגדיר מסלול-פרש (knight-path) במערך אם הוא מקיים את התנאים הבאים:
  1. המסלול מתחיל בתא הראשון במערך – שורה ראשונה ועמודה ראשונה.
  2. המסלול מסתיים בתא האחרון במערך – שורה אחרונה ועמודה אחרונה.
  3. המסלול לא יכול לחזור לתא בו הוא היה כבר!
  4. אפשר ללכת מתא לתא רק אם הפרש בין הערכים שנמצאים בשני התאים הוא לכל היותר 1. למשל, מתא שערכו הוא 4 אפשר ללכת לתא שערכו הוא 3 או 4 או 5.
  5. אפשר לעבור מתא אחד לשני רק בצעדים של פרש (knight) בלוח שחמט. כלומר, שילוב של צעד אחד ישר (למעלה, למטה, ימינה ושמאלה) וצעד אחד באלכסון (ארבעה כיוונים). להלן איור המתאר את הצעדים של הפרש בשחמט. התאים אליהם יכול לנוע הפרש על לוח השחמט שלהלן מסומנים בתו X.
 01234567
0        
1   X X  
2  X   X 
3    ♞   
4  X   X 
5   X X  
6        
7        

יש להחזיר את ערכו של הסכום הגדול ביותר של ערכי התאים שנמצאים במסלול-פרש, מבין כל מסלולי הפרש הקיימים במערך mat. אם אין מסלול כזה יוחזר -1.

לדוגמא, במערך להלן מסומן מסלול-פרש עם חיצים מלאים שסכומו מקסימלי – 28. שימו לב שיש עוד מסלול-פרש אחד במערך, הוא מסומן עם חיצים מקווקווים והוא: 6-5-6-5-4 אבל סכומו הוא 26 (לא הסכום המירבי).

שימו לב, קיימים עוד מסלולים במערך המורכבים מצעדי פרש אך הם אינם מסלולי-פרש כי ההפרשים בין התאים בהם אינם מתאימים להגדרה.

 01234
045671
135174
245658
334779
462276

השיטה צריכה להיות רקורסיבית ללא שימוש בלולאות כלל. כך גם כל שיטות העזר (אם תכתבו) לא יכולות להכיל לולאות.

אילוצים:

מותר לשנות את המערך במהלך השיטה, אבל בסופה הוא צריך לחזור למצבו המקורי.

דוגמה 1:
קלט:
mat =
[[4, 5, 6, 7, 1],
 [3, 5, 1, 7, 4],
 [4, 5, 6, 5, 8],
 [3, 4, 7, 7, 9],
 [6, 2, 2, 7, 6]]
פלט:
28

הסבר: המסלול המקסימלי האפשרי לפרש במטריצה זו הוא 28.

דוגמה 2:
קלט:
mat =
[[1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1]]
פלט:
25

הסבר: במטריצה זו כל המסלולים שווים ולכן הסכום המקסימלי הוא 25.

Loading...
נשמרLn 1, Col 1

קלט:

mat =
[[4, 5, 6, 7, 1],
 [3, 5, 1, 7, 4],
 [4, 5, 6, 5, 8],
 [3, 4, 7, 7, 9],
 [6, 2, 2, 7, 6]]

הפלט המבוקש:

28