#include<stdio.h>
void main()
{
int a[3][3]= {
3,6,-1,
4,5,1,
8,7,3,
};
int i,j,k;
int mini,maxj,minIndexI,maxIndexJ;
for(k=0; k<3; k++)
{
printf("找行最大:\n");
maxj = a[k][0];
maxIndexJ = k;
for(j=0; j<3; j++)
{
if(maxj < a[k][j])
{
maxj = a[k][j];
maxIndexJ = j;
}
printf("第%d行的最大下标:%d\n", k+1,maxIndexJ+1);
}
printf("找列最小:\n");
mini = a[k][maxIndexJ];
minIndexI = k;
for(i=0; i<3; i++)
{
if(mini > a[i][maxIndexJ])
{
minIndexI = i;
}
}
if(minIndexI == k)
{
printf("###########找到鞍点,行%d,列%d\n", minIndexI+1,maxIndexJ+1);
}
else
{
printf("第%d行没找到鞍点...\n", k+1);
}
}
}
[size=large]闲着无聊,又温习了一遍....[/size]
#include<stdio.h>
#define N 4
#define M 4
void findSaddlePoint(int a[N][M], int n, int m)
{
int i,j;
int maxRow,maxRowX,minColumnY;
for(i=0; i<n; i++)
{
//假定第i行的最大值在第0个位置
maxRowX = 0;
minColumnY = i;
//记录这个最大值
maxRow = a[i][maxRowX];
//寻找行最大值以及行最大值所在的列
for(j=1; j<m; j++)
{
if(a[i][j] > maxRow)
{
maxRow = a[i][j];
maxRowX = j;
}
}
//对于已找到的第i行的最大值,判断是否为所在列(maxRowX)的最小值
for(j=0; j<n; j++)
{
//如果发现该列有更小的值,则不是鞍点
if(a[j][maxRowX] < a[i][maxRowX])
{
minColumnY = j;
break;
}
}
//如果对该列遍历结束后发现该列的第i行仍然是最小值,则找到鞍点
if(minColumnY == i)
{
printf("找到鞍点%d (y:%d, x:%d)", a[minColumnY][maxRowX], minColumnY+1, maxRowX+1);
}
}
}
void main()
{
//有鞍点
int a[N][M]= {
1,2,3,4,
3,4,5,6,
5,6,7,8,
6,7,8,9,
};
/*
//无鞍点
int a[N][M]= {
2,1,1,1,
1,2,3,4,
4,5,6,7,
9,8,7,6,
};
*/
findSaddlePoint(a, N, M);
}