- //二維數組中的鞍點,行中最大,列中最小,也可能沒有鞍點
- #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");
- }
復制代碼
|