מסלול מקסימלי במטריצה דו-ממדית

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

נגדיר, מסלול במערך אם הוא מקיים את התנאים הבאים:

  1. התא הראשון במסלול הוא mat[0][0] (שורה ראשונה ועמודה ראשונה)
  2. המסלול עובר אך ורק בתאים שמכילים 1 או 0.
  3. בשורה עם אינדקס זוגי, אפשר ללכת אך ורק לתא מימין באותה שורה או לרדת לשורה הבאה באותה עמודה.
  4. בשורה עם אינדקס אי-זוגי, אפשר ללכת אך ורק לתא משמאל באותה שורה או לרדת לשורה הבאה באותה עמודה.

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

לדוגמה, מספר הנקודות המקסימלי במערך הבא הוא 9.

 01234
011-111
1100-11
21111-1
3-1-1111
411-1-11

אם בתא [0][0] הערך הוא -1 יוחזר -1.

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

אילוצים:

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

דוגמה 1:
קלט:
mat =
[[1, 1, -1, 1, 1],
 [1, 0, 0, -1, 1],
 [1, 1, 1, 1, -1],
 [-1, -1, 1, 1, 1],
 [1, 1, -1, -1, 1]]
פלט:
9

הסבר: המסלול המקסימלי האפשרי הוא 9, כאשר עוברים בתאים שמכילים 1 או 0 בלבד.

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

הסבר: המסלול המקסימלי האפשרי הוא 5, כאשר עוברים בתאים שמכילים 1 או 0 בלבד.

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

הסבר: המסלול המקסימלי האפשרי הוא 1, כאשר עוברים בתאים שמכילים 1 בלבד.

דוגמה 4:
קלט:
mat =
[[0, 0, 0],
 [0, 0, 0],
 [0, 0, 0]]
פלט:
0

הסבר: המסלול המקסימלי האפשרי הוא 0, כאשר עוברים בתאים שמכילים 0 בלבד.

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

הסבר: המסלול המקסימלי האפשרי הוא 9, כאשר עוברים בתאים שמכילים 1 בלבד.

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

הסבר: המסלול המקסימלי האפשרי הוא 2, כאשר עוברים בתאים שמכילים 1 או 0 בלבד.

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

הסבר: אין מסלול אפשרי כי כל התאים מכילים -1.

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

הסבר: המסלול המקסימלי האפשרי הוא 8, כאשר עוברים בתאים שמכילים 1 או 0 בלבד.

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

קלט:

mat =
[[1, 1, -1, 1, 1],
 [1, 0, 0, -1, 1],
 [1, 1, 1, 1, -1],
 [-1, -1, 1, 1, 1],
 [1, 1, -1, -1, 1]]

הפלט המבוקש:

9