马鞍点

 如果矩阵A中存在这样的一个元素A[i][j]满足我条件:A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马点。编写一个程序计算出m*n的矩阵A的所有马鞍点。

Code:
  1.    
  2. #include <stdio.h>  
  3. #define M 4  
  4. #define N 4  
  5. struct Matrix  
  6. {  
  7.    int i;  
  8.    int j;  
  9.    double data;  
  10. };  
  11. void MinMax(int A[M][N])  
  12. {  
  13.     int i,j,have=0;  
  14.     struct Matrix min[M],max[N];  
  15.     for (i=0;i<M;i++)   /*计算出每行的最小值元素,放入min[0..M-1]之中*/  
  16.     {  
  17.         min[i].data=A[i][0];  
  18.         for (j=1;j<N;j++)  
  19.             if (A[i][j]<min[i].data)   
  20.                 min[i].data=A[i][j];  
  21.     }  
  22.     for (j=0;j<N;j++)    /*计算出每列的最大值元素,放入max[0..N-1]之中*/  
  23.     {  
  24.         max[j].data=A[0][j];  
  25.         for (i=1;i<M;i++)  
  26.             if (A[i][j]>max[j].data)   
  27.                 max[j].data=A[i][j];  
  28.     }  
  29.     for (i=0;i<M;i++)                                   /*判定是否为马鞍点*/  
  30.         for (j=0;j<N;j++)  
  31.             if (min[i].data==max[j].data&&min[i].i==max[j].i)   
  32.             {  
  33.                 printf("  A[%d,%d]=%d/n",i,j,A[i][j]);  /*显示马鞍点*/  
  34.                 have=1;  
  35.             }  
  36.     if (!have)  
  37.         printf("没有鞍点/n");  
  38. }  
  39. void main()  
  40. {  
  41.     int i,j;  
  42.     int A[M][N]={{12,8,3,6},{40,37,28,30},{9,4,19,33},{24,15,22,7}};  
  43.     printf("A矩阵:/n");  
  44.     for (i=0;i<M;i++)  
  45.     {  
  46.         for (j=0;j<N;j++)  
  47.             printf("%4d",A[i][j]);  
  48.         printf("/n");  
  49.     }  
  50.     printf("A矩阵中的马鞍点:/n");  
  51.     MinMax(A);          /*调用MinMax()找马鞍点*/  
  52. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值