c语言寻找矩阵鞍点

  • 寻找一个方形矩阵的鞍点(该位置上的元素在该行最大,在该列最小)

  • 先找出矩阵每一行的最大值,在依次判断该行最大值是否为该列最小值。

#include<stdio.h>
int main()
{
 int a[5][5];
 int b[5];
 int i,j,t;
 int flag = 0;//用于标示数组b中是否存在不是-1的元素
 printf("输入一个5*5二维数组:\n");
 for(i=0;i<5;i++){
       scanf("%d %d %d %d %d",&a[i][0],&a[i][1],&a[i][2],&a[i][3],&a[i][4]);
      }

 //找出每一行中最大的元素,并把列号存在数组b中
 for(i=0;i<5;i++) {
     //默认每一行第一个元素为最大值
     b[i] = a[i][0];
     //引入一个循环变量t用来记录最大值的列号
     t = 0;
     //把最大值的数值暂时存在b中,把最大值的列号暂时存在t中
      for(j=0;j<5;j++){
            if(b[i]<a[i][j]){
                  b[i] = a[i][j];
                  t = j;
                 }
         }
     //如果一行中有两个相同的最大值,t等于-1
      for(j=0;j<5;j++){
            if(b[i]==a[i][j]&&j!=t){
                 t = -1;
                }
}
  //把最大值的列号存在b中
     b[i] = t;
      }

  for(i=0;i<5;i++){
    if(b[i]!=-1){
        for(j=0;j<5;j++){
            if(a[i][b[i]]>a[j][b[i]]) {
                b[i] = -1;
             }
            else if(a[i][b[i]]==a[j][b[i]]&&i!=j){
                b[i] = -1;
             }
          }
       }
}
  for(i=0;i<5;i++){
     if(b[i]!=-1){
           flag = 1;
           printf("鞍点为:a[%d][%d]\n",i,b[i]);
     }
  }
    if(flag==0){
       printf("没有鞍点");
    }
}


猜你喜欢

转载自blog.csdn.net/zuiziyoudexiao/article/details/79945978