作者在 2012-12-31 20:30:43 发布以下内容
/*
*求取矩阵鞍点的算法
*/
#include <stdio.h>
#include <stdlib.h>
#define M 3
#define N 3
int main()
{
int arr[M][N]={1,1,1,3,1,2,1,3,1};
int flag; //鞍点的标志
int x,y; // 记录鞍点的行号和列号
int count=0; //记录鞍点的个数
int temp;
int i,j,k;
for(int m=0;m<M;m++)
{
for(int n=0;n<N;n++)
{
printf("%4d",arr[m][n]);
}
printf("\n");
}
for(i=0;i<M;i++)
{
temp=arr[i][0]; //找出第i行的最大值,记录其列号y
x=i;y=0;
for(j=1;j<N;j++)
{
if(temp<arr[i][j])
{
temp=arr[i][j];
y=j;
}
}
flag=1; //假设当前点为鞍点
for(k=0;k<M;k++) //判断上述第i行,列号为y的最大值是否为第y列的最小值
{ //只要有一个符合就不是鞍点,用反面的观点看
if(temp>=arr[k][y]&&k!=i) //取>=以及k!=i可以排除重复元素的影响
{
flag=0;
break; //跳出是为了后面计数用的
}
}
if(flag==1)
{
printf("鞍点是arr[%d][%d]=%d\n",x,y,arr[x][y]);
count++;
}
}
if(count==0)printf("该矩阵没有鞍点\n");
else printf("该矩阵有%d个鞍点\n",count);
return 0;
system("pause");
}