我的任务是在数组中找到“最长的1行”,包括水平和垂直方向。这个数组只包含0和1,例如:
4 4
0 1 1 1
0 1 0 1
0 1 1 0
1 0 1 0
输出应该打印出“starting” 1的[ i ] [ j ]和“ending” 1的[ i ] [ j ]。所以水平方向应该是[1] [0] [3] [0]。
我正在使用我的getcolor()函数来获得[ i ] [ j ]位置上的值。
我已经思考了很长时间,几乎整个星期都在思考这个问题。我有一些想法,但都没有奏效。也许是因为我对C语言和数组完全不熟悉。
我知道我应该遍历数组,在每一个找到的1上把坐标保存到"start",然后继续,将找到的每一个1保存到"end"中。在找到0之后,比较长度,如果长度最大,则覆盖长度。但我无法正确编写代码。有人可以帮我写代码吗?非常感谢。
编辑:这就是我所拥有的,但我只是刚开始,它已经不能工作了:
if(arr != NULL) {
while (j < arr->cols) {
while (i <=arr->rows) {
if (getcolor(arr, i, j) == 1) {
startI = i;
startJ = j;
break;
}
else
i++;
}
i=0;
while (i <=arr->rows) {
if (getcolor(arr, i, j) == 1) {
endI = i;
endJ = j;
}
i++;
}
i=0;
printf("start %d %d\nend %d %d\nline %d\n\n", startI, startJ, endI, endJ, line);
j++;
}
}