【发布时间】:2025-12-13 22:35:01
【问题描述】:
我在为我的研究编写任务时遇到问题 - 一种检查二维数组是否为对角占优矩阵的算法。
为此我做了一个函数:
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。我找不到错误,请帮助我。我真的感觉筋疲力尽了。
谢谢。
【问题讨论】:
标签: c pointers multidimensional-array diagonal