У меня следующая проблема:
Парк, имеющий форму доски m x n. Есть k видов деревьев (1 <= k <= 100). Парк разделен на m x n ячеек, и в каждой ячейке они посадят дерево. Теперь на карте в каждой ячейке парка есть целое число i, если в нем посажено дерево i-го типа, или 0, если в нем нет деревьев. Линия ячеек считается «хорошей», если в ней есть хотя бы t деревьев одного типа (и они должны быть на одной строке или столбце). Подсчитайте количество деревьев, которых нет в «хорошей» строке. </p>
Входные данные: целые числа m, n, t и массив целых чисел m x n представляют карту.
Вывод: Количество деревьев, которые не находятся в "хорошей" линии.
Пример:
Введите:
5 6 3
1 3 3 3 3 4
1 2 3 2 0 4
3 2 2 2 4 4
1 0 0 2 4 0
1 2 3 0 4 4
Выход: 10
Объяснение: Жирным шрифтом обозначены деревья, которые не находятся в хорошей линии.
1 3 3 3 3 4
1 2 3 2 0 4
3 2 2 2 4 4
1 0 0 2 4 0
1 2 3 0 4 4
Моя идея - проверить каждый элемент в массиве. Если оно будет выполнено, я перейду к ближайшему элементу за «хорошей» линией. Иначе, он просто перейдет к следующему элементу в той же строке, или, если строка заканчивается, к следующему элементу в столбце.
Вот мой код
#include <stdio.h>
#define maxn 120
int a[maxn][maxn], m, n, t;
int check(int *i, int *j){
int k, cnt_r, cnt_c;
cnt_r = 0;
//jump to the nearest cell that is not in good line
for(k = *i + 1; k < m; k++){
if(a[*i][*j] == a[k][*j]) cnt_r++;
if(cnt_r >= t){
*i = k;
return 1;
}
}
cnt_c = 0;
for(k = *j + 1; k < n; k++){
if(a[*i][*j] == a[*i][k]) cnt_c++;
if(cnt_c >= t){
*j = k;
return 1;
}
}
return 0;
}
//check if this is the last square or not
int lastSq(int r, int c){
return (r == n - 1 && c == n);
}
int main(){
int res = 0, i, j, pos_r = 0, pos_c = 0;
scanf("%d%d%d", &m, &n, &t);
for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
scanf("%d", &a[i][j]);
while(!lastSq(pos_r, pos_c)){
if(a[pos_r][pos_c] == 0){
if(pos_c < n - 1) pos_c++;
else if(pos_r < n - 1){
pos_c = 0;
pos_r++;
}
}
if(!check(&pos_r, &pos_c)){
res++;
if(pos_c < n - 1) pos_c++;
else{
pos_c = 0;
pos_r++;
}
}
}
printf("%d", res);
}
Но он не печатает никаких выходных данных. Единственное, что у меня есть, это 0xC0000005. Может кто-нибудь проверить, где я допустил ошибку и указать направление? Спасибо.