ספירת אזורי true במטריצה בוליאנית

נתון מערך דו-ממדי (מספר השורות שווה למספר העמודות) שמכיל ערכים בוליאניים - true/false.

נגדיר: איזור true במערך (true region), כאוסף מקסימלי של תאים סמוכים שכולם בעלי ערך true. תאים הממוקמים באלכסון זה לזה לא נחשבים לסמוכים.

למשל, עבור המערך הבא, ישנם 3 אזורי true שונים והם מסומנים במערך:

 01234
000001
101110
200110
310000
411000

בהינתן מטריצה ריבועית בוליאנית יש להחזיר כמה אזורי true שונים קיימים במטריצה. אם לא קיימים אזורי true יוחזר 0.

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

אילוצים:

אזור true מורכב מלפחות תא אחד.

מותר לשנות את המערך.

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

הסבר: יש 3 אזורי true שונים: תא אחד בפינה הימנית העליונה, אזור של 5 תאים באמצע-מעלה, ואזור של 3 תאים בפינה השמאלית התחתונה,

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

הסבר: כל התאים במטריצה הם false, לכן אין אזורי true

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

הסבר: כל התאים במטריצה הם true ומחוברים זה לזה, לכן יש אזור true אחד גדול

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

הסבר: ישנם 4 תאים של true שאף אחד מהם לא מחובר לאחר, לכן יש 4 אזורי true נפרדים

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

הסבר: יש 2 אזורי true: אזור של 2 תאים בפינה השמאלית העליונה, ואזור של 2 תאים בפינה הימנית התחתונה

דוגמה 6:
קלט:
mat = [[true]]
פלט:
1

הסבר: כל התאים במטריצה הם false, לכן אין אזורי true

דוגמה 7:
קלט:
mat = [[false]]
פלט:
0

הסבר: מטריצה עם תא אחד שהוא false - אין אזורי true

דוגמה 8:
קלט:
mat =
[[true,false,true],
 [false,true,false],
 [true,false,true]]
פלט:
5

הסבר: מטריצה בדפוס שח-מט - כל תא true הוא אזור נפרד, סך הכל 5 אזורים

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

קלט:

mat =
[[false,false,false,false,true],
 [false,true,true,true,false],
 [false,false,true,true,false],
 [true,false,false,false,false],
 [true,true,false,false,false]]

הפלט המבוקש:

3