У меня проблема с кодированием задачи для моих исследований - алгоритм, который проверяет, является ли 2-мерный массив диагонально-доминирующей матрицей.
Для этого я создал функцию:
int dd_test(const int *ptr, int width, int height){
if (width!=height)
return -1;
int sum=0;
int j;
for (int i=0;i<width;i++){
for(j=0;j<height;j++){
if(i!=j){
if(*((ptr+i*width)+j)!=0)
sum+=abs(*((ptr+i*width)+j));
else
continue;
}
}
if(*((ptr+i*width)+j)<=sum)
return 0;
else if (*((ptr+i*width)+j)>sum)
sum = 0;
}
return 1;
}
Сначала он проверяет, является ли это квадратной матрицей, а затем проверяет, является ли число по диагонали наибольшим в строке. Если это не так, алгоритм возвращает 0; если это так, алгоритм переходит к следующей строке и повторяет это снова. Основная функция выглядит так:
int main(void) {
int wid=5, he=5;
int matrix[5][5]={0};
int *ma=matrix[0];
puts("Input a 5x5 matrix: ");
for(int i=0;i<5;i++){
if(scanf("%d %d %d %d %d",(ma+i*wid),((ma+i*wid)+1),((ma+i*wid)+2),((ma+i*wid)+3),((ma+i*wid)+4))!=5){
puts("Incorrect input");
return 1;
}
}
if(dd_test(ma, wid, he)==1)
puts("YES");
else if (dd_test(ma, wid,he)==0)
puts("NO");
return 0;
}
Проблема в том, что она всегда возвращает 0. Я не могу найти ошибку, пожалуйста, помогите мне. Я чувствую себя буквально выжженным.
Спасибо.