נתון מערך דו-ממדי (מספר השורות שווה למספר העמודות) שמכיל ערכים בוליאניים - true/false.
נגדיר: איזור true במערך (true region), כאוסף מקסימלי של תאים סמוכים שכולם בעלי ערך true. תאים הממוקמים באלכסון זה לזה לא נחשבים לסמוכים.
למשל, עבור המערך הבא, ישנם 3 אזורי true שונים והם מסומנים במערך:
| 0 | 1 | 2 | 3 | 4 | |
| 0 | 0 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 1 | 0 |
| 2 | 0 | 0 | 1 | 1 | 0 |
| 3 | 1 | 0 | 0 | 0 | 0 |
| 4 | 1 | 1 | 0 | 0 | 0 |
בהינתן מטריצה ריבועית בוליאנית יש להחזיר כמה אזורי true שונים קיימים במטריצה. אם לא קיימים אזורי true יוחזר 0.
השיטה צריכה להיות רקורסיבית ללא שימוש בלולאות כלל. כך גם כל שיטות העזר (אם תכתבו) לא יכולות להכיל לולאות.
אזור true מורכב מלפחות תא אחד.
מותר לשנות את המערך.
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 תאים בפינה השמאלית התחתונה,
mat = [[false,false,false], [false,false,false], [false,false,false]]
0
הסבר: כל התאים במטריצה הם false, לכן אין אזורי true
mat = [[true,true,true], [true,true,true], [true,true,true]]
1
הסבר: כל התאים במטריצה הם true ומחוברים זה לזה, לכן יש אזור true אחד גדול
mat = [[true,false,true], [false,false,false], [true,false,true]]
4
הסבר: ישנם 4 תאים של true שאף אחד מהם לא מחובר לאחר, לכן יש 4 אזורי true נפרדים
mat = [[true,true,false], [false,false,false], [false,true,true]]
2
הסבר: יש 2 אזורי true: אזור של 2 תאים בפינה השמאלית העליונה, ואזור של 2 תאים בפינה הימנית התחתונה
mat = [[true]]
1
הסבר: כל התאים במטריצה הם false, לכן אין אזורי true
mat = [[false]]
0
הסבר: מטריצה עם תא אחד שהוא false - אין אזורי true
mat = [[true,false,true], [false,true,false], [true,false,true]]
5
הסבר: מטריצה בדפוס שח-מט - כל תא true הוא אזור נפרד, סך הכל 5 אזורים
קלט:
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