如果矩阵A中存在这样的一个元素A[i][j]满足我条件:A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马点。编写一个程序计算出m*n的矩阵A的所有马鞍点 #include <stdio.h> #define M 4 #define N 4 struct Matrix { int i; int j; double data; }; void MinMax(int A[M][N]) { int i,j,have=0; struct Matrix min[M],max[N]; for (i=0;i<M;i++) /*计算出每行的最小值元素,放入min[0..M-1]之中*/ { min[i].data=A[i][0]; for (j=1;j<N;j++) if (A[i][j]<min[i].data) min[i].data=A[i][j]; } for (j=0;j<N;j++) /*计算出每列的最大值元素,放入max[0..N-1]之中*/ { max[j].data=A[0][j]; for (i=1;i<M;i++) if (A[i][j]>max[j].data) max[j].data=A[i][j]; } for (i=0;i<M;i++) /*判定是否为马鞍点*/ for (j=0;j<N;j++) if (min[i].data==max[j].data&&min[i].i==max[j].i) { printf(" A[%d,%d]=%d/n",i,j,A[i][j]); /*显示马鞍点*/ have=1; } if (!have) printf("没有鞍点/n"); } void main() { int i,j; int A[M][N]={{12,8,3,6},{40,37,28,30},{9,4,19,33},{24,15,22,7}}; printf("A矩阵:/n"); for (i=0;i<M;i++) { for (j=0;j<N;j++) printf("%4d",A[i][j]); printf("/n"); } printf("A矩阵中的马鞍点:/n"); MinMax(A); /*调用MinMax()找马鞍点*/ }