我遇到以下问题:
具有m x n木板形式的公园。有k种树(1 <= k <= 100)。公园分为m x n个单元,每个单元将种植一棵树。现在,在地图上,如果公园中种植了第i种树,则公园的每个单元内都将有一个整数i;如果其中没有种植任何树,则其内部将为一个整数i。如果一行至少有t棵相同类型的树(并且它们必须在同一行或同一列上),则该行被视为“良好”。计算不在“好”行中的树的数量。
输入:整数m,n,t和m×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。有人可以检查我在哪里犯了错误并提供指示吗?谢谢。