Моя задача - найти «длинную строку» из 1 в массиве. Горизонтальная и вертикальная. массив изготавливается только из 0 и 1, и выглядит, например, так:Как получить самую длинную строку из 1 в массиве/матрице
4 4
0 1 1 1
0 1 0 1
0 1 1 0
1 0 1 0
Вывод должен напечатать [я] [J] из «начиная с» 1, и [я] [J] из «окончание» 1. Итак, горизонтальный должен быть [1] [0] [3] [0].
Я использую функцию getcolor(), чтобы получить значение на [i] [j] месте.
Я думаю об этом для WAAAAY долго, потратил почти целую неделю на это. У меня были некоторые идеи, но никто не работал. Может быть, потому что я новичок в C и совершенно новый для массивов.
Я знаю, что мне нужно пройти через массив, на каждом найденном ему нужно сохранить координаты для «запуска» и перейти к следующему, сохраняя каждый 1 найденный до «конца». После того, как 0 найдено, сравните длину, и если длина наибольшая, перепишите длину. Но мне не удалось написать код правильно. Может ли кто-нибудь помочь мне написать код? Большое спасибо.
Edit: Это то, что у меня есть, но я только в самом начале, и он не работает уже:
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++;
}
}
Пожалуйста, покажите некоторые фрагменты кода, который вы уже написали. – woolstar
У вас есть общая идея, изложенная в вашем описании, пожалуйста, напишите код, который вы попробовали, и сообщите нам, почему он не работает. –
Это похоже на поиск подмассива с максимальной суммой. –