思路:遍歷矩陣的每壹行,找出最大值,在最大值對應的列找最小值,然後判斷最大值和最小值的位置是否相等。具體代碼如下:
#include?<stdio.h>
#include<stdlib.h>
void?FindSaddlePoint(int?a[][20],?int?m,?int?n);
main()
{
int?a[20][20];?//數組儲存矩陣
int?m,n;?//分別表示矩陣的行數和列數
int?i,j;?//循環變量
//人機交互輸入數據
printf("Input?m,n:\n");
scanf("%d,%d",&m,&n);
printf("Input?matrix:\n"?);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
FindSaddlePoint(a,m,n);
system("pause");
}
//函數功能:輸入矩陣數組、行數和列數,判斷是否存在鞍點並輸出結果
void?FindSaddlePoint(int?a[][20],?int?m,?int?n)
{
int?i,j,k;?//循環變量
int?b,c,d;?//儲存下標:b和d儲存最大值的下標,d儲存最小值的下標
int?flag=0;?//判斷是否有鞍點:值為1則有,值為0則無
int?max,min;?//每行中的最大值和每列中的最小值
//第壹層循環遍歷每壹行
for(i=0;i<m;i++)
{
//先該行中的第壹個數賦值給最大值並保存其位置
max=a[i][0];
b=i;
d=0;
//找出每壹行中的最大值的值及位置
for(j=0;j<n;j++)
{
if(max<a[i][j])
{
max=a[i][j];
b=i;
d=j;
}
}
//先將找到的最大值賦值給最小值,作為初值並存儲下標(由於列是壹樣的所以只需要儲存行的位置即可)
min=max;
c=b;
//從找到的最大值中的那壹列找該列的最小值並存儲其位置
for(k=0;k<m;k++)
{
if(min>a[k][d])
{
min=a[k][d];
c=k;
}
}
//判斷最大值和最小值的位置是否相同
if(b==c)
{
flag=1;
break;
}
}
//輸出語句
if(flag==1)
printf("a[%d][%d]?is?%d\n",b,d,max);
else
printf("No?saddle?point!\n");
}