- //二维数组中的鞍点,行中最大,列中最小,也可能没有鞍点
- #include<stdio.h>
- void main()
- {
- //首先输入一个二维数组
- //这个二维数组是任意阶数的
- int m;//数组的阶数
- int a[20][20];
- int i,j;//数组的坐标
- int t;//每一行当前最大值存放变量
- int p,q;//存放最大值坐标的变量
- int l=0;//累计列中比当前值大的数的数量
- int k;//为了防止最外层的i被破坏,引进一个新的变量
- int n=0;//累计所有鞍点的个数
- printf("please input order and then input elements:\n");
- scanf("%d",&m);
- for(i=0;i<m-1;i++)
- {
- for(j=0;j<=m-1;j++)
- {
- scanf("%d",&a[i][j]);
- }
- }
- //现在材料有了,该处理数据了
- //我想先从第一行开始,找到最大的,再确定是否是该列最小的,如果是,阶数循环,输出该数及该数坐标
- //如果不是,继续从下一行找
- for(i=0;i<=m-1;i++)
- {
- t=a[i][0];
- for(j=0;j<=m-1;j++)
- {
- if(a[i][j]>=t)
- {
- t=a[i][j];
- p=i;
- q=j;//现在t里面存放当前行里面的最大值,pq中存放着他的坐标
- }
- }
- for(k=0;k<=m-1;k++)//在当前列中寻找是否有比他大的,++not--
- {
- if(a[k][q]>=t)
- {
- l+=1;
- }
- }
-
- if(l==m-1)
- { n=n+1;
- printf("%3d,%3d\n",p,q);}
- l=0;//变量l清零,为下一次做准备
-
- }
- if(n>0)
- printf(" exists a saddle point\n");
- else
- printf("does not exist a saddle point\n");
- }
复制代码
|