首先 一个二维数组 每一行肯定都有最大值的 再判断是不是这一列的最小值即可
int main()
{
bool flag;
const int n = 5;
const int m = 5;
int arr[n][m];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> arr[i][j];
int count = 0;
for (int i = 0; i < n; i++)
{
int max = arr[i][0]; //储存这一行的最大值
int maxy = 0; //储存这一行的最大值的列
for (int j = 0; j < m; j++)
{
if (arr[i][j] > max)
{
max = arr[i][j];
maxy = j; //maxy储存的是这一行的最大值的列标
}
}
flag = true; //每一行肯定有一个最大值的
for (int j = 0; j < n; j++)
{
if (arr[j][maxy] < max)
{
flag = false; //即这个最大值不是这一列的最小值
break;
}
}
if (flag) //这一行的循环过后 这个flag成立 则说明这一行有鞍点
{
count++;
cout << "行为:" << i+1 << "列为:" << maxy+1 << "的元素是鞍点" << endl;
}
}
if (!count)
{
cout << "此数组无鞍点" << endl;
}
return 0;
}
有几个需要注意的点 如 max和maxy需要放在循环内 因为每一行结束后 都要进行更改max和maxy这两个值分别存储这一行的最大值 和最大值的列标
之后再将布尔变量改为真 这时进行判断i行最大值是不是maxy列最小值 如果有一个值比这个max小 则说明不是maxy列最小值 即布尔变量改为假