鞍点:该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define N 4 4 #define M 5 5 int main() 6 { 7 int i,j,k,maxj,max,a[N][M],flag; 8 printf("input matrix: "); 9 for(i=0;i<N;i++){ 10 for(j=0;j<M;j++){ 11 scanf("%d",&a[i][j]); 12 } 13 } 14 for(i=0;i<N;i++){ 15 for(j=0;j<M;j++){ 16 printf("%5d",a[i][j]); 17 } 18 printf(" "); 19 } 20 for(i=0;i<N;i++){ 21 max=a[i][0];//开始时假设a[i][0]最大 22 maxj=0;//将最大数的列号存在maxj中 23 for(j=0;j<M;j++){//找出行最大值 24 if(a[i][j]>max){ 25 max=a[i][j]; 26 maxj=j;//将最大数的列号存在maxj中 27 } 28 } 29 flag=1;//假设为鞍点 30 for(k=0;k<N;k++){ 31 if(max > a[k][maxj]){//将该行最大数与同列元素相比 32 flag=0;//如果该数不是同列最小,表示不是鞍点,令flag=0; 33 continue;//跳出k的循环 34 } 35 } 36 if(flag){//flag为1表示是鞍点 37 printf("a[%d][%d]=%d ",i,maxj,max); 38 break;//跳出i的循环 39 } 40 } 41 if(!flag) 42 printf("not exist "); 43 system("pause"); 44 return 0; 45 }