马鞍点程序出了点问题
马鞍点是指在矩阵某元素在某一行最大,但在其所在列为最小的那个数称为马鞍点。程序运行的结果如下所示:
[color=#330099]请输入3行4列矩阵A的12个元素:
[color=#00CC33]1 1 1 2
1 1 1 3
1 1 1 4
a[1][4]是矩阵的马鞍点
a[1][4]是矩阵的马鞍点
Press any key to continue
程序如下所示,一直没找到错误,求大神帮忙
#define M 3
#define N 4
#include<stdio.h>
int main(void)
{
int a[M][N],b[N]={0};
int i,j,max,flag,w,k,sign=0,u,t,num;
printf("请输入3行4列矩阵A的12个元素:\n");
for(i=0;i<M;i++) //输入二维数组的12个整数
{
for(j=0;j<N;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<M;i++)
{
k=0;
max=a[i][0];//假设每一行的第一个元素为最大值
for(j=1;j<N;j++)//找出第i行的最大数
{
t=0;//用t标记a[i][0]的列下标
if(max<a[i][j])//将比max大的数赋给max,并记下这个数的列下标
{
max=a[i][j];
t=j;
}
}
b[k]=t;//第i行找到的首个max元素的列下标存入b[0]
for(j=t;j<N;j++)//找出第i行和max相等的数,记下其列下标存入数组b
{
if(max==a[i][j])
{
k++;
b[k]=j;
}
}
if(!k)//判断与max相等的数是否存在,不存在则num=1,存在则num=k;
num=1;
else
num=k+1;
for(j=0;j<num;j++)//对每个max进行列比较
{
u=b[j];
for(w=0;w<M;w++)
{
flag=1;
if(max>a[w][u])//如果max不是所在列的最小值,标志位flag置0,并跳出循环
{
flag=0;break;
}
}
if(flag)//如果max是所在列的最小值,flag=1,找到了马鞍点,标记sign=1
{
printf("a[%d][%d]是矩阵的马鞍点\n",i+1,u+1);
sign=1;
}
}
}
if(!sign)//未找到马鞍点sign=0
{
printf("在矩阵A中不存在马鞍点\n");
}
return 0;
}