먼저, 주어진 영상이 모두 0 또는 1로 되어있는지 판단하는 함수를 만든다.
만약 주어진 영상이 0과 1이 섞여있으면, 같은 수로 이루어진 영상이 나올 때 까지 4등분 한다.
int check(int n, int start_i, int start_j) {
int pivot = mat[start_i][start_j];
for (int i = start_i;i < start_i + n;i++) {
for (int j = start_j;j < start_j + n;j++) {
if (mat[i][j] != pivot)
return FALSE;
}
}
printf("%d", pivot);
return TRUE;
}
- pivot: 영상에서 첫번째 원소
void divideMat(int n, int start_i, int start_j) {
int res = check(n, start_i, start_j);
int next_size = n / 2;
if (res == FALSE && n >= 2) { // exit condition
printf("(");
for (int i = start_i;i < start_i + n;i += next_size) {
for (int j = start_j;j < start_j + n;j += next_size) {
divideMat(next_size, i, j);
}
}
printf(")");
}
}
- 종료조건: 주어진 영상이 모두 같은 수로 이뤄져있거나(res = TRUE), 영상의 길이가 2보다 작은 경우(n < 2) 더이상 4등분 할 필요가 없다.
divideMat(n, 0, 0);