מציאת המסלול הארוך ביותר במערך בינארי

נתון מערך דו-מימדי mat המלא במספרים אפס או אחד. נגדיר, מסלול חוקי במערך כמסלול שמתחיל בתא (0,0) ומסתיים בתא היעד (x,y) ועובר רק בתאים שערכם הוא 1. אפשר לעבור מתא לתא רק אם הוא שכן שלו מימין, משמאל, למעלה או למטה. לא באלכסון. כמו כן, אי אפשר לבקר בתא שכבר ביקרנו בו.

יש להחזיר את אורכו של המסלול הארוך ביותר במערך mat.

לדוגמה, במערך להלן, עבור x = 2, y = 5 אורכו של המסלול הארוך ביותר הוא 16, ומסומן במערך.

 0123456
01111111
11101001
21111011

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

אילוצים:

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

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

הסבר: המסלול הארוך ביותר מתחיל בתא (0,0) ומסתיים בתא (2,5) עם אורך של 16.

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

הסבר: המסלול הארוך ביותר מתחיל בתא (0,0) ומסתיים בתא (2,2) עם אורך של 4.

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

הסבר: המסלול הארוך ביותר מתחיל בתא (0,0) ומסתיים בתא (2,2) עם אורך של 5.

דוגמה 4:
קלט:
mat =
[[1, 0, 1, 1],
 [1, 1, 0, 1],
 [0, 1, 1, 1]],
x = 1,
y = 3
פלט:
6

הסבר: המסלול הארוך ביותר מתחיל בתא (0,0) ומסתיים בתא (1,3) עם אורך של 6.

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

הסבר: המסלול הארוך ביותר מתחיל בתא (0,0) ומסתיים בתא (1,1) עם אורך של 3.

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

הסבר: אין מסלול אפשרי, כי הערך בתא הראשון הוא 0

דוגמה 7:
קלט:
mat =
[[1, 1, 0],
 [0, 1, 1],
 [1, 1, 0]],
x = 1,
y = 2
פלט:
4

הסבר: המסלול הארוך ביותר מתחיל בתא (0,0) ומסתיים בתא (1,2) עם אורך של 4.

דוגמה 8:
קלט:
mat =
[[1, 1, 1, 1],
 [1, 0, 0, 1],
 [1, 1, 1, 1]],
x = 2,
y = 3
פלט:
7

הסבר: המסלול הארוך ביותר מתחיל בתא (0,0) ומסתיים בתא (2,3) עם אורך של 7.

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

קלט:

mat =
[[1, 1, 1, 1, 1, 1, 1],
 [1, 1, 0, 1, 0, 0, 1],
 [1, 1, 1, 1, 0, 1, 1]],
x = 2,
y = 5

הפלט המבוקש:

16