寻找二维数组的“鞍点”

鞍点:该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。

    

 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:\n");
 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("\n");
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\n",i,maxj,max);
38             break;//跳出i的循环
39         }
40     }
41     if(!flag)
42         printf("not exist\n");
43     system("pause");
44     return 0;
45 }

 

posted @ 2016-09-30 11:34  米琪儿  阅读(1141)  评论(0编辑  收藏  举报