鞍点(Saddle point)在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点。在泛函中,既不是极大值点也不是极小值点的临界点,叫做鞍点。在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。在物理上要广泛一些,指在一个方向是极大值,另一个方向是极小值的点。
设计思路:
(1)先找第i行上最大的元素t,及其所在列maxj
(2)判断t是否为第maxj列的最大值,如果是则输出,并令flag=1
(3)flag==0代表无鞍点
程序代码如下:
#include "stdio.h"
int main()
{
system("color F0");//白底黑字
int i,j,k,x,y,flag=0;
printf("请输入矩阵的行数和列数:");
scanf("%d%d",&x,&y);
int a[x][y];
printf("请按行输入矩阵的元素:");
for(i=0;i<x;i++)
for(j=0;j<y;j++)
scanf("%d",&a[i][j]);
printf("所输入的矩阵为:\n");
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
printf("%d ",a[i][j]);
printf("\n");
}
int t,maxj;
for(i=0;i<x;i++)
{
t=a[i][0];
maxj=0;
for(j=1;j<y;j++)//行上最大
{
if(a[i][j]>t)
{
t=a[i][j];
maxj=j;
}
}
for(k=0;k<x;k++)
if(a[k][maxj]<t)//判断是否列上最小
break;
if(k<x) continue;//接着查找下一行
printf("鞍点是:a[%d][%d]:%d\n",i,maxj,t);
flag=1;
//break;
}
if(!flag)
printf("no solution!\n");
return 0;
}