求助一简单c语言题:调用函数求矩阵鞍点

求助一简单c语言题:调用函数求矩阵鞍点调用函数的方法

#include<stdio.h>
void find_an(int a[][6],int n)
{int i,j,x,y,k,max,min,flag=0;
for(i=0;i<n;i++)    //扫描所有的行
{max=a[i][0]; y=0;    //首元素先作为行上"最大"的数
    x=i;
for(k=1;k<n;k++)
  if(max<=a[i][k])max=a[i][k];    //找出行上的最大值
for(j=1;j<n;j++)
  if(max==a[i][j])        //检查行上最大值的列
  {
y=j;    //记录本行上最大的数,及其列号y
min=a[i][y];        //把a[i][y]当作y列上最小的数
for(k=0;k<n;k++)    //找出y列上最小的数及所在的列号
if(min>a[k][y])
{x=k;min=a[k][y];}
if(min==max)        //找到一个鞍点
{printf("a[%d][%d]=%d是鞍点\n",x,y,a[x][y]);
 flag=1;
}
  }
}
if(flag==0)printf("NONE");
}
int main()
{
int a[6][6];
int n,i,j;
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
find_an(a,n);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-09-28

#include<stdio.h>
#define M 3 
#define N 3 
struct index{
   int x,y;
};
static index ss[100]; 
int count = 0; 

int min(int t[],int n)
{
   int temp=30000,flag;
   for(int i=0;i<n;i++)
   if(t[i]<temp)
   {temp=t[i];flag=i;}
   return flag;
}

void andian(int a[M][N],int m,int n)
{
int tmp;int k;
  for(int i=0;i<m;i++)
  {
  int flg=1;
      k=min(a[i],n);
      tmp=a[i][k];
  for(int j=0;j<m;j++)
if(tmp<a[j][k])
flg=0;
      if(flg==1)
  {
  ss[count].x=i;
      ss[count].y=k;
  count++;
  }
  }
       
}

void main()
{
for(int i=0;i<100;i++)
ss[i].x=-1;
int A[M][N];
// int A[M][N]={4,5,6
//         ,1,0,1,
//  1,1,1};
printf("请输入%d*%d矩阵:\n",M,N);
for(int p=0;p<M;p++)
for(int q=0;q<N;q++)
scanf("%d",*(A+p)+q);
andian(A,M,N);
int f=0;
   if(ss[f].x==-1) printf("无鞍点\n");
  else
while(ss[f].x!=-1)
{ printf("鞍点:A[%d,%d]=%d\n",ss[f].x,ss[f].y,A[ss[f].x][ss[f].y]); f++;}
printf("鞍点数为%d\n",count);
}

相似回答