Я не напишу весь код для вас, но предложу некоторые вещи, которые помогут вам в правильном направлении. Вы должны понимать, как выполнять итерацию по двумерному массиву (матрице), а также как выполнять итерацию по одной строке или столбцу в этой матрице.
Учитывая (жестко закодированное) определение матрицы, которое выглядит следующим образом:
struct Matrix4x4
{
int m[4][4];
};
Чтобы перебрать все элементы, которые вы хотите написать примерно так:
Matrix4x4 matrix;
for (size_t row = 0; row < 4; ++row)
{
for (size_t col = 0; col < 4; ++col)
{
// do something with 'matrix.m[row][col]'
}
}
Это будет перебирать вашу матрицу от верхнего левого угла (0,0) до правого нижнего угла (3,3). Я предполагаю, что это порядок обхода, который вам сказали использовать.
Чтобы обработать строку, вы хотите написать что-то вроде этого:
void FunctionThatOperatesOnARow(Matrix4x4& matrix, size_t row)
{
for (size_t col = 0; col < 4; ++col)
{
// do something with 'matrix.m[row][col]'
}
}
Для обработки столбца вы хотите написать что-то вроде этого:
void FunctionThatOperatesOnAColumn(Matrix4x4& matrix, size_t col)
{
for (size_t row = 0; row < 4; ++row)
{
// do something with 'matrix.m[row][col]'
}
}
Теперь вам нужно изменить первый бит кода, который повторяется по всем элементам, и заставить его проверить на 1. Затем вам нужно вызвать соответствующие функции, чтобы очистить текущий столбец и строку (которые вы можете основать на последних двух примерах).
Для окончательного результата вы можете просто увеличивать локальную переменную счетчика каждый раз, когда обнаруживаете 1.