如果矩阵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()找马鞍点*/
- }