קוד:
int check_zone(int nums[N][M], int x, int y, int num)
{
int a,b,c,d,e,f,g,h;
static int washere[N][M]={0};
if((x>=0)&&(x<=N-1)&&(y>=0)&&(y<=M-1)&&(nums[x,y]==num)&&(!washere[x][y]))
{
washere[x][y]=1;
a=check_zone(nums[N][M], x+1, y, num);
b=check_zone(nums[N][M], x-1, y, num);
c=check_zone(nums[N][M], x, y+1, num);
d=check_zone(nums[N][M], x, y-1, num);
e=check_zone(nums[N][M], x+1, y+1, num);
f=check_zone(nums[N][M], x-1, y+1, num);
g=check_zone(nums[N][M], x+1, y-1, num);
h=check_zone(nums[N][M], x-1, y-1, num);
return 1+a+b+c+d+e+f+g+h;
}
return 0;
}
בדרך הזאת, המערך החדש שיצרתי, מאותחל רק פעם אחת כי הוא סטטי, וכל איבריו בהתחלה שווים לאחד. האיבר במערך שאני צריך לבדוק, נבדק רק אם מקומו במערך החדששווה ל-0.אם לא - סימן שכבר נבדק, ומדלגים עליו. בדרך זו אני בעצם בודק בדיוק את מה שהיה לי לפני, רק לא משנה את הערכים במערך המקורי.